Date Words
Mark Smith
marksmithhfx at gmail.com
Wed Jun 12 16:36:25 EDT 2024
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 at 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 at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
More information about the use-livecode
mailing list