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 x 100 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