New date format: YYYY-MM-DD

Rob Cozens rcozens at pon.net
Sat Oct 15 11:25:08 EDT 2005


Aloha Sannyasin,

>Anyone want to vote for a new standard date format?
>
>YYYY-MM-DD

I prefer a seven-digit Julian representation: YYYYDDD.

Saves one character per date, and the logic for calculating the # of days 
between two dates and calculating the date x days before or after a given 
date is a bit simpler, me thinks.

Hi Charles,

>It would be *great* to have a
>smart function like that, that would take the whole range of formats
>various users might type into a field. (Anybody got one?)

I come from a multi-user background where one expects everyone will use the 
same date format when entering dates in the same application; so my date 
routines can support any Control Panel system date format currently in 
effect, but mark any date that is not system compliant as invalid.

Following are some of the Julian date routines in Serendipity Library 
<http:wecode.org/serendipity/>:

function systemDateToJulian theDate -- 16 Mar 04:RCC
   get validDate(theDate) -- returns "true" & return & the dateItems if 
date is valid per
   -- the computer's system date format
   if word 1 of it then return dateItemsToJulian(line 2 of it) else return 
empty
end systemDateToJulian

function dateItemsToJulian theDateItems -- 17 Mar 04:RCC
   put item 1 of theDateItems into theJulianDate
   put 31 into monthLength[1]
   if leapYear(theJulianDate) then put 29 into monthLength[2]
   else put 28 into monthLength[2]
   put 31 into monthLength[3]
   put 30 into monthLength[4]
   put 31 into monthLength[5]
   put 30 into monthLength[6]
   put 31 into monthLength[7]
   put 31 into monthLength[8]
   put 30 into monthLength[9]
   put 31 into monthLength[10]
   put 30 into monthLength[11]
   put 31 into monthLength[12]
   multiply theJulianDate by 1000
   get (item 2 of theDateItems)-1
   repeat with x = 1 to it
     add monthLength[x] to theJulianDate
   end repeat
   add item 3 of theDateItems to theJulianDate
   return justifyString(theJulianDate,7,"left","0") -- for centuries < 1000
end dateItemsToJulian

function julianToSystemDate theJulianDate -- 16 Mar 04:RCC
   get julianToDateItems(theJulianDate)
   return formatDate(item 1 of it,item 2 of it,item 3 of it,true) -- 
formats to system date
end julianToSystemDate

function julianToDateItems theJulianDate -- 7 Apr 04:RCC
   put 0 into monthEnd[0]
   put 31 into monthEnd[1]
   put 59 into monthEnd[2]
   put 90 into monthEnd[3]
   put 120 into monthEnd[4]
   put 151 into monthEnd[5]
   put 181 into monthEnd[6]
   put 212 into monthEnd[7]
   put 243 into monthEnd[8]
   put 273 into monthEnd[9]
   put 304 into monthEnd[10]
   put 334 into monthEnd[11]
   put 365 into monthEnd[12]
   put (char 1 to -4 of theJulianDate) into theYear
   put char -3 to -1 of theJulianDate into julianDays
   if julianDays < 1 then return empty
   if leapYear(theYear) then
     if julianDays = 60 then return itemsWithDay(theYear&",2,29,0,0,0,0")
     else if julianDays > 60 then subtract 1 from julianDays
   end if
   if julianDays > 365 then return empty
   repeat with x = 1 to 12
     if julianDays <= monthEnd[x] then
       put x into theMonth
       put julianDays - monthEnd[x-1] into theDays
       return itemsWithDay(theYear&comma&theMonth&comma&theDays&",0,0,0,0")
--   itemsWithDay returns the constructed dateItems  string with the 
correct day of
--   week represented by the first 3 items
     end if
   end repeat
end julianToDateItems

Rob Cozens

"We are living on a dying planet.
  We're killing everything that's alive.
  And anyone who tries to deny it wears a tie,
  and gets paid to lie."

  -- Joe Walsh, from "Songs for a Dying Planet" 




More information about the use-livecode mailing list