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