diff --git a/docs/index.html b/docs/index.html index 8368152..571d68c 100644 --- a/docs/index.html +++ b/docs/index.html @@ -531,12 +531,69 @@
+local centuryflip = date.getcenturyflip()
+
+ +local centuryflip = date.getcenturyflip() ++
+date.setcenturyflip(century_flip
)
+
+ +date.setcenturyflip(0) +assert(date("01-01-00")==date(1900,01,01)) +assert(date("01-01-50")==date(1950,01,01)) +assert(date("01-01-99")==date(1999,01,01)) +date.setcenturyflip(100) +assert(date("01-01-00")==date(2000,01,01)) +assert(date("01-01-50")==date(2050,01,01)) +assert(date("01-01-99")==date(2099,01,01)) +date.setcenturyflip(50) +assert(date("01-01-00")==date(2000,01,01)) +assert(date("01-01-49")==date(2049,01,01)) +assert(date("01-01-50")==date(1950,01,01)) +assert(date("01-01-99")==date(1999,01,01)) ++
Date Format. Short dates can use either a "/" or - "-" date separator, but must follow the month/day/year format
+ "-" date separator, but must follow the month/day/year format. 2 + digit years are interpreted according to the global + centuryflip setting.assert(date("02-03-04")==date(1904,02,03)) assert(date("12/25/98")==date(1998,12,25)) diff --git a/spec/date_spec.lua b/spec/date_spec.lua index 983dcc9..138b524 100644 --- a/spec/date_spec.lua +++ b/spec/date_spec.lua @@ -69,6 +69,27 @@ describe("Testing the 'date' module", function() local e = date() assert(e) end) + it("Tests century-flip", function() + local old = date.getcenturyflip() + finally(function() + date.setcenturyflip(old) + end) + + assert(old==0) + assert(date("01-01-00")==date(1900,01,01)) + assert(date("01-01-50")==date(1950,01,01)) + assert(date("01-01-99")==date(1999,01,01)) + date.setcenturyflip(100) + assert(date("01-01-00")==date(2000,01,01)) + assert(date("01-01-50")==date(2050,01,01)) + assert(date("01-01-99")==date(2099,01,01)) + date.setcenturyflip(50) + assert(date("01-01-00")==date(2000,01,01)) + assert(date("01-01-49")==date(2049,01,01)) + assert(date("01-01-50")==date(1950,01,01)) + assert(date("01-01-99")==date(1999,01,01)) + end) + it("Tests leap year", function() assert.is_true(date.isleapyear(2012)) assert.is_true(date.isleapyear(2000)) diff --git a/src/date.lua b/src/date.lua index 4d50e5d..6a991b5 100644 --- a/src/date.lua +++ b/src/date.lua @@ -21,6 +21,8 @@ local DAYNUM_MIN = -365242500 -- Mon Jan 01 1000000 BCE 00:00:00 local DAYNUM_DEF = 0 -- Mon Jan 01 0001 00:00:00 local _; +--[[ GLOBAL SETTINGS ]]-- + local centuryflip = 0 -- year >= centuryflip == 1900, < centuryflip == 2000 --[[ LOCAL ARE FASTER ]]-- local type = type local pairs = pairs @@ -325,7 +327,7 @@ elseif sw("^(%d+)[/\\%s,-]?%s*") then --print("$Digits") x, c = tonumber(sw[1]), len(sw[1]) if (x >= 70) or (m and d and (not y)) or (c > 3) then - sety( x + ((x >= 100 or c>3)and 0 or 1900) ) + sety( x + ((x >= 100 or c>3) and 0 or x100 then date_error_arg() end + centuryflip = y + end + function date.getcenturyflip() return centuryflip end -- Internal functions function date.fmt(str) if str then fmtstr = str end; return fmtstr end