diff --git a/lib/index.js b/lib/index.js index 614b8f2..9c2c172 100644 --- a/lib/index.js +++ b/lib/index.js @@ -42,6 +42,19 @@ return n < 10 ? (padding + n) : n; } + function pad3(n, padding) { + padding = padding || '0'; + if (n < 10) { + return padding + padding + n; + } + else if (n < 100) { + return padding + n; + } + else { + return n; + } + } + function hours12(d) { var hour = d.getHours(); if (hour == 0) hour = 12; @@ -73,8 +86,10 @@ d = d || new Date(); locale = locale || DefaultLocale; locale.formats = locale.formats || {} + var msDelta = 0; if (_useUTC) { - d = new Date(d.getTime() + ((d.getTimezoneOffset() || 0) * 60000)); + msDelta = (d.getTimezoneOffset() || 0) * 60000; + d = new Date(d.getTime() + msDelta); } // Most of the specifiers supported by C's strftime @@ -100,7 +115,8 @@ case 'R': return strftime(locale.formats.R || '%H:%M', d, locale); case 'r': return strftime(locale.formats.r || '%I:%M:%S %p', d, locale); case 'S': return pad(d.getSeconds()); - case 's': return d.getTime(); + case 's': return Math.floor((d.getTime() - msDelta) / 1000); + case 'L': return pad3(Math.floor(d.getTime() % 1000)); case 'T': return strftime(locale.formats.T || '%H:%M:%S', d, locale); case 't': return '\t'; case 'u': diff --git a/test/test.coffee b/test/test.coffee new file mode 100644 index 0000000..aaed772 --- /dev/null +++ b/test/test.coffee @@ -0,0 +1,39 @@ + +assert = require 'assert' + +lib = require './../lib' + + +# Tue, 07 Jun 2011 18:51:45 GMT +t = new Date 1307472705867 + + +TESTS = [ + + ["%L", "867"] + + ["%Y", "2011"] + + ["%m", "06"] + ["%b", "Jun"] + ["%B", "June"] + + ["%d", null, "07"] + + ["%H", null, "18"] + + ["%M", "51"] + + ["%S", "45"] + + ["%s", "1307472705"] +] + +for [format, expectedNonUTC, expectedUTC] in TESTS + expectedUTC or= expectedNonUTC + for [name, expected] in [['strftime', expectedNonUTC], ['strftimeUTC', expectedUTC]] + if expected + got = lib[name] format, t + assert.equal expected, got, "Error for #{name}(#{JSON.stringify(format)}, t): expected #{JSON.stringify(expected)}, got #{JSON.stringify(got)}" + +console.log "OK"