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@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@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@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 _______________________________________________ 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