Hi Bob,

I love the concept in principle but that’s a lot of code (to write and debug) 
and it does’t cover every possible permutation and combination of date 
requests. I long for a time when we can just capture a string like “a week from 
next Friday” and then call…

 function string2gptDate
     chatGPT “what is the date “ & “a week from next Friday” -- the latter 
being the captured input, probably expressed as a field or var
     return it
end string2gptDate

Which I just tried after prompting “when asked for a date please return the 
date and not an explanation as to how you arrived at the date” and in response 
to the above it returned "June 28, 2024”.

Magnifico!

Mark 

> On 12 Jun 2024, at 4:20 PM, Bob Sneidar via use-livecode 
> <use-livecode@lists.runrev.com> wrote:
> 
> Hi all. 
> 
> Did you ever want to use phrases like yesterday, last tuesday or next friday 
> in a date field? 
> 
> function dateWords pDate
>   if word 1 of pDate is not among the items of 
> "last,next,yesterday,today,tomorrow" then \
>         return empty
> 
>   put date() into tCurrentDate
>   convert tCurrentDate to dateItems
> 
>   if the number of words of pDate = 2 then
>      put "sunday,monday,tuesday,wednesday,thursday,friday,saturday" into 
> tDaysOfWeek
>      put itemOffset(word 2 of pDate, tDaysOfWeek) into tDayNumber
>      put item 7 of tCurrentDate into tThisDayNumber
> 
>      if tDayNumber = 0 then \
>            return empty
>   end if
> 
>   switch
>      case word 1 of pDate is "last"
>         if tDayNumber >= tThisDayNumber then \
>               subtract 7 from item 3 of tCurrentDate
>         add (tDayNumber - tThisDayNumber) to item 3 of tCurrentDate
>         break
>      case word 1 of pDate is "next"
>         add 7-tDayNumber to item 3 of tCurrentDate
>         break
>      case pDate is "yesterday"
>         subtract 1 from item 3 of tCurrentDate
>         break
>      case pDate is "today"
>         -- don't do anything
>         break
>      case pDate is "tomorrow"
>         add 1 to item 3 of tCurrentDate
>         break
>   end switch
> 
>   put formatDate(tCurrentDate, "standard") into pDate
>   return pDate
> end dateWords
> 
> FUNCTION formatDate theDate, theFormat
>   /*
>   Accepts any valid date for the first parameter. If not a valid date, it 
> simply returns
>   what was passed. Second parameter can be any of the following:
>   sql date: date in the yyyy-mm-dd format
>   short date, abbreviated date, internet date, long date: LC versions of the 
> same
>   julian date: Julian number based on (I believe) Jacques formula
>   standard date: The date in the form of "mm/dd/yyyy"
>   */
> 
>   put theDate into tSavedDate
>   put the itemdelimiter into theOldDelim
>   set the itemdelimiter to "-"
> 
>   IF the length of item 1 of theDate = 4 AND \
>         the number of items of theDate = 3 AND \
>         item 1 of theDate is a number AND \
>         item 2 of theDate is a number AND \
>         item 3 of theDate is a number THEN
>      put item 2 of theDate & "/" & \
>            item 3 of theDate & "/" & \
>            item 1 of theDate into theDate
>   END IF
> 
>   -- replace "." with "/" in theDate
>   convert theDate to dateitems
>   set the itemdelimiter to theOldDelim
> 
>   --   if the number of items of theDate <> 7 then
>   --      answer "'" & theDate & "' is not a valid date format!"
>   --      return tSavedDate
>   --   end if
> 
>   SWITCH word 1 of theFormat
>      CASE "sql"
>         /*
>         put item 1 of theDate & "-" & \
>               format("%02d",item 2 of theDate) & "-" & \
>               format("%02d",item 3 of theDate) into theDate
>         */
>         put format("%s-%02d-%02d", item 1 of theDate, item 2 of theDate, \
>               item 3 of theDate) into theDate
>         break
>      CASE "short"
>         convert theDate from dateitems to short date
>         break
>      CASE "abbreviated"
>         convert theDate from dateitems to abbreviated date
>         break
>      CASE "abbr"
>         convert theDate from dateitems to abbreviated date
>         break
>      CASE "internet"
>         convert theDate from dateitems to internet date
>         break
>      CASE "long"
>         convert theDate from dateitems to long date
>         break
>      CASE "julian"
>         put the date into theDate
>         convert theDate to dateItems
>         IF  ((item 2 of theDate = 1) OR (item 2 of theDate = 2)) THEN
>            put 1 into theDay
>         ELSE
>            put 0 into theDay
>         END IF
>         put item 1 of theDate + 4800 - theDay into theYear
>         put item 2 of theDate + (12 * theDay) - 3 into theMonth
>         put item 3 of theDate + \
>               ((153 * theMonth + 2) div 5) + \
>               (365 * theYear) + \
>               (theYear div 4) - \
>               (theYear div 100) + \
>               (theYear div 400) - \
>               32045 into theDate
>         break
>      case "standard"
>         put format("%02d/%02d/%04d", item 2 of theDate, item 3 of theDate, \
>               item 1 of theDate) into theDate
>         break
>      default 
>         --         answer info "'" & theFormat & "' is not a valid 
> parameter." As sheet
>         put tSavedDate into theDate
>   END SWITCH
> 
>   return theDate
> END formatDate
> 
> Bob S
> _______________________________________________
> use-livecode mailing list
> use-livecode@lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription 
> preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode

_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode
  • Date Words Bob Sneidar via use-livecode
    • Re: Date Words Mark Smith via use-livecode

Reply via email to