Convert date
Mark Smith
marksmithhfx at gmail.com
Sat Jul 15 16:53:33 EDT 2023
Thanks Bob. These examples are all very handy to have. Added to the wiki!! Just kidding, I do think we need a wiki somewhere for these kinds of code snippets but I’m not offering to build it (this year). We’ll have to see how bored I am next year, or, hopefully, someone else will beat me to it. 😊🙏
> On 14 Jul 2023, at 4:34 pm, Bob Sneidar via use-livecode <use-livecode at lists.runrev.com> wrote:
>
> Hmmm… I read the enhancement request. I’m still in the dark though on how to get to "2023-07-14 08:30:00" from “7/14/23” using format strings. Here’s my solution for those who do not want to download the masterLibrary. Given these, what else do you need?
>
> 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
> */
>
> 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 theFormat
> CASE "sql date"
> put item 1 of theDate & "-" & \
> format("%02d",item 2 of theDate) & "-" & \
> format("%02d",item 3 of theDate) into theDate
> break
> CASE "short date"
> convert theDate from dateitems to short date
> break
> CASE "abbreviated date"
> convert theDate from dateitems to abbreviated date
> break
> CASE "abbr date"
> convert theDate from dateitems to abbreviated date
> break
> CASE "internet date"
> convert theDate from dateitems to internet date
> break
> CASE "long date"
> convert theDate from dateitems to long date
> break
> CASE "julian date"
> 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
> END SWITCH
>
> return theDate
> END formatDate
>
> FUNCTION formatTime theTime, theFormat
> /*
> accepts any valid time and returns the form of the time specified in the second parameter.
> The valid formats are:
> sql time: hh:mm:ss (Note: combining sql date from the formatDate() function with the
> sql time will produce a valid SQL date time type).
> short time: LC short time format
> abbreviated time: LC abbr time format (same as short time)
> long time: LC long time format
> seconds: the number of seconds since the prior midnight
> military: the military time 00:00 - 23:59
> */
>
> IF theTime is empty THEN return empty
>
> set the numberformat to "00"
> SWITCH theFormat
> CASE "sql time"
> convert theTime to dateitems
> put (item 4 of theTime +0) & ":" & \
> (item 5 of theTime +0) & ":" & \
> (item 6 of theTime +0) into theTime
> break
> CASE "short time"
> convert theTime to short time
> break
> CASE "abbreviated time"
> convert theTime to abbreviated time
> break
> CASE "long time"
> convert theTime to long time
> break
> CASE "seconds"
> convert theTime to seconds
> break
> CASE "military"
> set the itemdelimiter to ":"
>
> IF theTime contains "PM" THEN
> add 12 to item 1 of theTime
> END IF
>
> put word 1 of item 2 of theTime into item 2 of theTime
> break
> END SWITCH
>
> return theTime
> END formatTime
>
> And as an added bonus, those who use Spiceworks know they format time for tickets as 0h0m0s.
>
> FUNCTION spiceTime pStartTime, pEndTime
> convert pStartTime to dateItems
> convert pEndTime to dateItems
> subtract item 4 of pStartTime from item 4 of pEndTime
> subtract item 5 of pStartTime from item 5 of pEndTime
> convert pEndTime from dateItems to short time
> put formatTime(pEndTime, "military") into pEndTime
> set the itemdelimiter to ":"
> IF item 1 of pEndTime > 11 THEN subtract 12 from item 1 of pEndTime
> put item 1 of pEndTime & "h" & item 2 of pEndTime & "m" into tTotalTime
> return tTotalTime
> END spiceTime
>
> Bob S
>
>
>> On Jul 13, 2023, at 4:19 PM, ambassador--- via use-livecode <use-livecode at lists.runrev.com> wrote:
>>
>> Neville Smythe wrote:
>>> I seem to have hallucinated that the built-in convert handler recognised
>>> the ISO date and dateTime formats (YYYY-MM-DD, YYYY-MM-DD
>>> hh:mm:ss+-http://hh.ss, etc) but I must have written my own conversion
>>> routines in a former life.
>>> But one would have to ask… Why doesn’t it?
>>> After all, the original ISO 8601 standard was adopted 1988!
>>
>> https://quality.livecode.com/show_bug.cgi?id=4636
>>
>> --
>> Richard Gaskin
>> Fourth World Systems
>>
>>
>> _______________________________________________
>> 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
>
> _______________________________________________
> 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