diff --git a/Makefile b/Makefile index 8ae980c1..58a899c4 100644 --- a/Makefile +++ b/Makefile @@ -140,6 +140,8 @@ tests: \ tests/test-attr.test \ tests/test-call.test \ tests/test-format.test \ + tests/test-time-format.test \ + tests/test-time-parse.test \ tests/test-transition.test \ tests/test-scale-linear.test \ tests/test-scale-sqrt.test \ @@ -156,7 +158,7 @@ d3.js d3%.js: Makefile cat $(filter %.js,$^) > $@ @chmod a-w $@ -%.test: %.js %.out d3.js +%.test: %.js %.out all @/bin/echo -n "test: $* " @node $< > $*.actual @diff -U 3 $*.out $*.actual && rm -f $*.actual \ diff --git a/d3.time.js b/d3.time.js index ba5b2e46..bc52245e 100644 --- a/d3.time.js +++ b/d3.time.js @@ -63,7 +63,7 @@ function d3_time_parse(date, template, string, j) { var d3_time_zfill2 = d3.format("02d"), d3_time_zfill3 = d3.format("03d"), d3_time_zfill4 = d3.format("04d"), - d3_time_sfill2 = d3.format(" 2d"); + d3_time_sfill2 = d3.format("2d"); var d3_time_formats = { a: function(d) { return d3_time_weekdays[d.getDay()].substring(0, 3); }, @@ -223,14 +223,14 @@ function d3_time_parseLocaleTime(date, string, i) { } function d3_time_parseFullYear(date, string, i) { - d3_time_number4Re.lastIndex = 0; - var n = d3_time_number4Re.exec(string.substring(i, i + 4)); + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 4)); return n ? (date.setFullYear(n[0]), i += n[0].length) : -1; } function d3_time_parseYear(date, string, i) { - d3_time_number2Re.lastIndex = 0; - var n = d3_time_number2Re.exec(string.substring(i, i + 2)); + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); return n ? (date.setFullYear(d3_time_century() + +n[0]), i += n[0].length) : -1; } @@ -239,21 +239,21 @@ function d3_time_century() { } function d3_time_parseMonthNumber(date, string, i) { - d3_time_number2Re.lastIndex = 0; - var n = d3_time_number2Re.exec(string.substring(i, i + 2)); + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); return n ? (date.setMonth(n[0] - 1), i += n[0].length) : -1; } function d3_time_parseDay(date, string, i) { - d3_time_number2Re.lastIndex = 0; - var n = d3_time_number2Re.exec(string.substring(i, i + 2)); + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); return n ? (date.setDate(+n[0]), i += n[0].length) : -1; } // Note: we don't validate that the hour is in the range [0,23]. function d3_time_parseHour24(date, string, i) { - d3_time_number2Re.lastIndex = 0; - var n = d3_time_number2Re.exec(string.substring(i, i + 2)); + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); return n ? (date.setHours(+n[0]), i += n[0].length) : -1; } @@ -264,20 +264,19 @@ function d3_time_parseHour12(date, string, i) { } function d3_time_parseMinutes(date, string, i) { - d3_time_number2Re.lastIndex = 0; - var n = d3_time_number2Re.exec(string.substring(i, i + 2)); + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); return n ? (date.setMinutes(+n[0]), i += n[0].length) : -1; } function d3_time_parseSeconds(date, string, i) { - d3_time_number2Re.lastIndex = 0; - var n = d3_time_number2Re.exec(string.substring(i, i + 2)); + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); return n ? (date.setSeconds(+n[0]), i += n[0].length) : -1; } // Note: we don't look at the next directive. -var d3_time_number2Re = /[\s\d]{1,2}/, - d3_time_number4Re = /[\s\d]{1,4}/; +var d3_time_numberRe = /\s*\d+/; function d3_time_parseAmPm(date, string, i) { var n = d3_time_amPmLookup[string.substring(i, i += 2).toLowerCase()]; diff --git a/d3.time.min.js b/d3.time.min.js index cce37352..9a2c9a3d 100644 --- a/d3.time.min.js +++ b/d3.time.min.js @@ -1,8 +1,8 @@ -(function(){function j(a,b,c,e){for(var d,h=0,i=b.length,k=c.length;h=k)return-1;d=b.charCodeAt(h++);if(d==37){d=u[b.charAt(h++)];if(!d||(e=d(a,c,e))<0)return-1}else if(d!=c.charCodeAt(e++))return-1}return e}function m(a,b,c){f.lastIndex=0;return(b=f.exec(b.substring(c,c+2)))?(a.setDate(+b[0]),c+b[0].length):-1}function n(a,b,c){f.lastIndex=0;return(b=f.exec(b.substring(c,c+2)))?(a.setHours(+b[0]),c+b[0].length):-1}d3.time={};d3.time.format=function(a){function b(e){for(var d=[],h=-1,i= -0,k,o;++h= -12?"PM":"AM"},S:function(a){return g(a.getSeconds())},U:function(a){var b=new Date(a.getFullYear(),0,1);return g(~~(((a-b)/864E5+b.getDay())/7))},w:function(a){return a.getDay()},W:function(a){var b=new Date(a.getFullYear(),0,1);return g(~~(((a-b)/864E5+(b.getDay()+6)%7)/7))},x:d3.time.format("%m/%d/%y"),X:d3.time.format("%H:%M:%S"),y:function(a){return g(a.getYear()%100)},Y:function(a){return w(a.getFullYear()%1E4)},Z:function(a){a=a.getTimezoneOffset();var b=Math.abs(a)%60;return(a>0?"-":"+")+g(~~(Math.abs(a)/ -60))+g(b)},"%":function(){return"%"}},u={a:function(a,b,c){return b.substring(c,c+=3).toLowerCase()in y?c:-1},A:function(a,b,c){r.lastIndex=0;return(a=r.exec(b.substring(c,c+10)))?c+a[0].length:-1},b:function(a,b,c){b=z[b.substring(c,c+=3).toLowerCase()];return b==null?-1:(a.setMonth(b),c)},B:function(a,b,c){s.lastIndex=0;return(b=s.exec(b.substring(c,c+12)))?(a.setMonth(A[b[0].toLowerCase()]),c+b[0].length):-1},c:function(a,b,c){return j(a,l.c.toString(),b,c)},d:m,e:m,H:n,I:function(a,b,c){a.hour12= -true;return n(a,b,c)},m:function(a,b,c){f.lastIndex=0;return(b=f.exec(b.substring(c,c+2)))?(a.setMonth(b[0]-1),c+b[0].length):-1},M:function(a,b,c){f.lastIndex=0;return(b=f.exec(b.substring(c,c+2)))?(a.setMinutes(+b[0]),c+b[0].length):-1},p:function(a,b,c){b=B[b.substring(c,c+=2).toLowerCase()];return b==null?-1:(a.hour12pm=b,c)},S:function(a,b,c){f.lastIndex=0;return(b=f.exec(b.substring(c,c+2)))?(a.setSeconds(+b[0]),c+b[0].length):-1},x:function(a,b,c){return j(a,l.x.toString(),b,c)},X:function(a, -b,c){return j(a,l.X.toString(),b,c)},y:function(a,b,c){f.lastIndex=0;return(b=f.exec(b.substring(c,c+2)))?(a.setFullYear(~~((new Date).getFullYear()/1E3)*1E3+ +b[0]),c+b[0].length):-1},Y:function(a,b,c){t.lastIndex=0;return(b=t.exec(b.substring(c,c+4)))?(a.setFullYear(b[0]),c+b[0].length):-1}},y={sun:3,mon:3,tue:3,wed:3,thu:3,fri:3,sat:3},r=/^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/ig,p=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],z={jan:0,feb:1,mar:2, -apr:3,may:4,jun:5,jul:6,aug:7,sep:8,oct:9,nov:10,dec:11},s=/^(?:January|February|March|April|May|June|July|August|September|October|November|December)/ig,A={january:0,february:1,march:2,april:3,may:4,june:5,july:6,august:7,september:8,october:9,november:10,december:11},q=["January","February","March","April","May","June","July","August","September","October","November","December"],f=/[\s\d]{1,2}/,t=/[\s\d]{1,4}/,B={am:0,pm:1}})(); +(function(){function j(a,b,c,f){for(var d,h=0,i=b.length,k=c.length;h=k)return-1;d=b.charCodeAt(h++);if(d==37){d=t[b.charAt(h++)];if(!d||(f=d(a,c,f))<0)return-1}else if(d!=c.charCodeAt(f++))return-1}return f}function m(a,b,c){e.lastIndex=0;return(b=e.exec(b.substring(c,c+2)))?(a.setDate(+b[0]),c+b[0].length):-1}function n(a,b,c){e.lastIndex=0;return(b=e.exec(b.substring(c,c+2)))?(a.setHours(+b[0]),c+b[0].length):-1}d3.time={};d3.time.format=function(a){function b(f){for(var d=[],h=-1,i= +0,k,o;++h= +12?"PM":"AM"},S:function(a){return g(a.getSeconds())},U:function(a){var b=new Date(a.getFullYear(),0,1);return g(~~(((a-b)/864E5+b.getDay())/7))},w:function(a){return a.getDay()},W:function(a){var b=new Date(a.getFullYear(),0,1);return g(~~(((a-b)/864E5+(b.getDay()+6)%7)/7))},x:d3.time.format("%m/%d/%y"),X:d3.time.format("%H:%M:%S"),y:function(a){return g(a.getYear()%100)},Y:function(a){return v(a.getFullYear()%1E4)},Z:function(a){a=a.getTimezoneOffset();var b=Math.abs(a)%60;return(a>0?"-":"+")+g(~~(Math.abs(a)/ +60))+g(b)},"%":function(){return"%"}},t={a:function(a,b,c){return b.substring(c,c+=3).toLowerCase()in x?c:-1},A:function(a,b,c){r.lastIndex=0;return(a=r.exec(b.substring(c,c+10)))?c+a[0].length:-1},b:function(a,b,c){b=y[b.substring(c,c+=3).toLowerCase()];return b==null?-1:(a.setMonth(b),c)},B:function(a,b,c){s.lastIndex=0;return(b=s.exec(b.substring(c,c+12)))?(a.setMonth(z[b[0].toLowerCase()]),c+b[0].length):-1},c:function(a,b,c){return j(a,l.c.toString(),b,c)},d:m,e:m,H:n,I:function(a,b,c){a.hour12= +true;return n(a,b,c)},m:function(a,b,c){e.lastIndex=0;return(b=e.exec(b.substring(c,c+2)))?(a.setMonth(b[0]-1),c+b[0].length):-1},M:function(a,b,c){e.lastIndex=0;return(b=e.exec(b.substring(c,c+2)))?(a.setMinutes(+b[0]),c+b[0].length):-1},p:function(a,b,c){b=A[b.substring(c,c+=2).toLowerCase()];return b==null?-1:(a.hour12pm=b,c)},S:function(a,b,c){e.lastIndex=0;return(b=e.exec(b.substring(c,c+2)))?(a.setSeconds(+b[0]),c+b[0].length):-1},x:function(a,b,c){return j(a,l.x.toString(),b,c)},X:function(a, +b,c){return j(a,l.X.toString(),b,c)},y:function(a,b,c){e.lastIndex=0;return(b=e.exec(b.substring(c,c+2)))?(a.setFullYear(~~((new Date).getFullYear()/1E3)*1E3+ +b[0]),c+b[0].length):-1},Y:function(a,b,c){e.lastIndex=0;return(b=e.exec(b.substring(c,c+4)))?(a.setFullYear(b[0]),c+b[0].length):-1}},x={sun:3,mon:3,tue:3,wed:3,thu:3,fri:3,sat:3},r=/^(?:Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)/ig,p=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],y={jan:0,feb:1,mar:2, +apr:3,may:4,jun:5,jul:6,aug:7,sep:8,oct:9,nov:10,dec:11},s=/^(?:January|February|March|April|May|June|July|August|September|October|November|December)/ig,z={january:0,february:1,march:2,april:3,may:4,june:5,july:6,august:7,september:8,october:9,november:10,december:11},q=["January","February","March","April","May","June","July","August","September","October","November","December"],e=/\s*\d+/,A={am:0,pm:1}})(); diff --git a/src/time/format.js b/src/time/format.js index ad66a464..5553fa7e 100644 --- a/src/time/format.js +++ b/src/time/format.js @@ -62,7 +62,7 @@ function d3_time_parse(date, template, string, j) { var d3_time_zfill2 = d3.format("02d"), d3_time_zfill3 = d3.format("03d"), d3_time_zfill4 = d3.format("04d"), - d3_time_sfill2 = d3.format(" 2d"); + d3_time_sfill2 = d3.format("2d"); var d3_time_formats = { a: function(d) { return d3_time_weekdays[d.getDay()].substring(0, 3); }, @@ -222,14 +222,14 @@ function d3_time_parseLocaleTime(date, string, i) { } function d3_time_parseFullYear(date, string, i) { - d3_time_number4Re.lastIndex = 0; - var n = d3_time_number4Re.exec(string.substring(i, i + 4)); + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 4)); return n ? (date.setFullYear(n[0]), i += n[0].length) : -1; } function d3_time_parseYear(date, string, i) { - d3_time_number2Re.lastIndex = 0; - var n = d3_time_number2Re.exec(string.substring(i, i + 2)); + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); return n ? (date.setFullYear(d3_time_century() + +n[0]), i += n[0].length) : -1; } @@ -238,21 +238,21 @@ function d3_time_century() { } function d3_time_parseMonthNumber(date, string, i) { - d3_time_number2Re.lastIndex = 0; - var n = d3_time_number2Re.exec(string.substring(i, i + 2)); + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); return n ? (date.setMonth(n[0] - 1), i += n[0].length) : -1; } function d3_time_parseDay(date, string, i) { - d3_time_number2Re.lastIndex = 0; - var n = d3_time_number2Re.exec(string.substring(i, i + 2)); + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); return n ? (date.setDate(+n[0]), i += n[0].length) : -1; } // Note: we don't validate that the hour is in the range [0,23]. function d3_time_parseHour24(date, string, i) { - d3_time_number2Re.lastIndex = 0; - var n = d3_time_number2Re.exec(string.substring(i, i + 2)); + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); return n ? (date.setHours(+n[0]), i += n[0].length) : -1; } @@ -263,20 +263,19 @@ function d3_time_parseHour12(date, string, i) { } function d3_time_parseMinutes(date, string, i) { - d3_time_number2Re.lastIndex = 0; - var n = d3_time_number2Re.exec(string.substring(i, i + 2)); + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); return n ? (date.setMinutes(+n[0]), i += n[0].length) : -1; } function d3_time_parseSeconds(date, string, i) { - d3_time_number2Re.lastIndex = 0; - var n = d3_time_number2Re.exec(string.substring(i, i + 2)); + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.substring(i, i + 2)); return n ? (date.setSeconds(+n[0]), i += n[0].length) : -1; } // Note: we don't look at the next directive. -var d3_time_number2Re = /[\s\d]{1,2}/, - d3_time_number4Re = /[\s\d]{1,4}/; +var d3_time_numberRe = /\s*\d+/; function d3_time_parseAmPm(date, string, i) { var n = d3_time_amPmLookup[string.substring(i, i += 2).toLowerCase()]; diff --git a/tests/test-scale-linear.js b/tests/test-scale-linear.js index e1ea6677..231231df 100644 --- a/tests/test-scale-linear.js +++ b/tests/test-scale-linear.js @@ -1,7 +1,6 @@ require("./../lib/env-js/envjs/node"); require("./../lib/sizzle/sizzle"); require("./../d3"); -require("./../d3.time"); var f = d3.format(" .3f"); diff --git a/tests/test-scale-pow.js b/tests/test-scale-pow.js index d6f347ce..16689d2d 100644 --- a/tests/test-scale-pow.js +++ b/tests/test-scale-pow.js @@ -1,7 +1,6 @@ require("./../lib/env-js/envjs/node"); require("./../lib/sizzle/sizzle"); require("./../d3"); -require("./../d3.time"); var f = d3.format(" .3f"); diff --git a/tests/test-scale-sqrt.js b/tests/test-scale-sqrt.js index 4a5c4623..e270aa5e 100644 --- a/tests/test-scale-sqrt.js +++ b/tests/test-scale-sqrt.js @@ -1,7 +1,6 @@ require("./../lib/env-js/envjs/node"); require("./../lib/sizzle/sizzle"); require("./../d3"); -require("./../d3.time"); var f = d3.format(" .3f"); diff --git a/tests/test-time-format.js b/tests/test-time-format.js new file mode 100644 index 00000000..557ec952 --- /dev/null +++ b/tests/test-time-format.js @@ -0,0 +1,22 @@ +require("./../lib/env-js/envjs/node"); +require("./../d3"); +require("./../d3.time"); + +var formats = [ + "a", "A", "b", "B", "c", "d", "e", "H", "I", "j", "m", "M", + "p", "S", "U", "w", "W", "x", "X", "y", "Y", "Z", "%" +]; + +var now = new Date(1990, 0, 1); +console.log("format 01/01/1990 00:00:00:"); +formats.forEach(function(f) { + console.log(" " + f + ":", d3.time.format("%" + f)(now)); +}); +console.log(""); + +var now = new Date(2011, 11, 31, 23, 59, 59); +console.log("format 12/31/2011 23:59:59:"); +formats.forEach(function(f) { + console.log(" " + f + ":", d3.time.format("%" + f)(now)); +}); +console.log(""); diff --git a/tests/test-time-format.out b/tests/test-time-format.out new file mode 100644 index 00000000..916f204f --- /dev/null +++ b/tests/test-time-format.out @@ -0,0 +1,50 @@ +format 01/01/1990 00:00:00: + a: Mon + A: Monday + b: Jan + B: January + c: Mon Jan 1 00:00:00 1990 + d: 01 + e: 1 + H: 00 + I: 12 + j: 001 + m: 01 + M: 00 + p: AM + S: 00 + U: 00 + w: 1 + W: 00 + x: 01/01/90 + X: 00:00:00 + y: 90 + Y: 1990 + Z: -0800 + %: % + +format 12/31/2011 23:59:59: + a: Sat + A: Saturday + b: Dec + B: December + c: Sat Dec 31 23:59:59 2011 + d: 31 + e: 31 + H: 23 + I: 11 + j: 365 + m: 12 + M: 59 + p: PM + S: 59 + U: 52 + w: 6 + W: 52 + x: 12/31/11 + X: 23:59:59 + y: 11 + Y: 2011 + Z: -0800 + %: % + diff --git a/tests/test-time-parse.js b/tests/test-time-parse.js new file mode 100644 index 00000000..bfb2f668 --- /dev/null +++ b/tests/test-time-parse.js @@ -0,0 +1,79 @@ +require("./../lib/env-js/envjs/node"); +require("./../d3"); +require("./../d3.time"); + +var f = d3.time.format("%c"); + +console.log("parse a m/d/Y:"); +console.log(" Sun 01/01/1990:", f(d3.time.format("%a %m/%d/%Y").parse("Sun 01/01/1990"))); +console.log(" Wed 01/01/1990:", f(d3.time.format("%a %m/%d/%Y").parse("Wed 01/01/1990"))); +console.log(" XXX 01/01/1990:", d3.time.format("%a %m/%d/%Y").parse("XXX 01/01/1990")); +console.log(""); + +console.log("parse A m/d/Y:"); +console.log(" Sunday 01/01/1990:", f(d3.time.format("%A %m/%d/%Y").parse("Sunday 01/01/1990"))); +console.log(" Wednesday 01/01/1990:", f(d3.time.format("%A %m/%d/%Y").parse("Wednesday 01/01/1990"))); +console.log(" Caturday 01/01/1990:", d3.time.format("%A %m/%d/%Y").parse("Caturday 01/01/1990")); +console.log(""); + +console.log("parse m/d/y:"); +console.log(" 1/1/90:", f(d3.time.format("%m/%d/%y").parse("1/1/90"))); +console.log(" 1/1/10:", f(d3.time.format("%m/%d/%y").parse("1/1/10"))); +console.log(""); + +console.log("parse x:"); +console.log(" 1/1/90:", f(d3.time.format("%x").parse("1/1/90"))); +console.log(" 1/1/10:", f(d3.time.format("%x").parse("1/1/10"))); +console.log(""); + +console.log("parse b d Y:"); +console.log(" jan 01, 1990:", f(d3.time.format("%b %d, %Y").parse("jan 01, 1990"))); +console.log(" jan 1, 1990:", f(d3.time.format("%b %d, %Y").parse("jan 1, 1990"))); +console.log(" 1 Feb., 1990:", f(d3.time.format("%d %b., %Y").parse("1 Feb., 1990"))); +console.log(" 01 Feb., 1990:", f(d3.time.format("%d %b., %Y").parse("01 Feb., 1990"))); +console.log(" 1 Feb., 1990:", f(d3.time.format("%d %b., %Y").parse(" 1 Feb., 1990"))); +console.log(" 1 Feb., 1990:", f(d3.time.format(" %d %b., %Y").parse(" 1 Feb., 1990"))); +console.log(" Moy 1 1990:", d3.time.format("%b %d %Y").parse("Moy 1 1990")); +console.log(""); + +console.log("parse B d Y:"); +console.log(" January 01, 1990:", f(d3.time.format("%B %d, %Y").parse("January 01, 1990"))); +console.log(" january 1, 1990:", f(d3.time.format("%B %d, %Y").parse("january 1, 1990"))); +console.log(" 1 February, 1990:", f(d3.time.format("%d %B, %Y").parse("1 February, 1990"))); +console.log(" 01 February, 1990:", f(d3.time.format("%d %B, %Y").parse("01 February, 1990"))); +console.log(" 1 February, 1990:", f(d3.time.format("%d %B, %Y").parse(" 1 February, 1990"))); +console.log(" 1 February, 1990:", f(d3.time.format(" %d %B, %Y").parse(" 1 February, 1990"))); +console.log(" Juin 1 1990:", d3.time.format("%B %d %Y").parse("Join 1 1990")); +console.log(""); + +console.log("parse c:"); +console.log(" Mon Jan 1 00:00:00 1990:", f(d3.time.format("%c").parse("Mon Jan 1 00:00:00 1990"))); +console.log(" Sun Jan 1 00:00:00 1990:", f(d3.time.format("%c").parse("Sun Jan 1 00:00:00 1990"))); +console.log(" Mon Jan 01 00:00:00 1990:", f(d3.time.format("%c").parse("Mon Jan 01 00:00:00 1990"))); +console.log(" Mon Jan 1 00:00:00 1990:", f(d3.time.format("%c").parse("Mon Jan 1 00:00:00 1990"))); +console.log(" Mon Jan 1 0:0:0 1990:", f(d3.time.format("%c").parse("Mon Jan 1 0:0:0 1990"))); +console.log(""); + +console.log("parse H M S:"); +console.log(" 00:00:00:", f(d3.time.format("%H:%M:%S").parse("00:00:00"))); +console.log(" 11:59:59:", f(d3.time.format("%H:%M:%S").parse("11:59:59"))); +console.log(" 12:00:00:", f(d3.time.format("%H:%M:%S").parse("12:00:00"))); +console.log(" 12:00:01:", f(d3.time.format("%H:%M:%S").parse("12:00:01"))); +console.log(" 23:59:59:", f(d3.time.format("%H:%M:%S").parse("23:59:59"))); +console.log(""); + +console.log("parse X:"); +console.log(" 00:00:00:", f(d3.time.format("%X").parse("00:00:00"))); +console.log(" 11:59:59:", f(d3.time.format("%X").parse("11:59:59"))); +console.log(" 12:00:00:", f(d3.time.format("%X").parse("12:00:00"))); +console.log(" 12:00:01:", f(d3.time.format("%X").parse("12:00:01"))); +console.log(" 23:59:59:", f(d3.time.format("%X").parse("23:59:59"))); +console.log(""); + +console.log("parse I M S p:"); +console.log(" 12:00:00 am:", f(d3.time.format("%I:%M:%S %p").parse("12:00:00 am"))); +console.log(" 11:59:59 AM:", f(d3.time.format("%I:%M:%S %p").parse("11:59:59 AM"))); +console.log(" 12:00:00 pm:", f(d3.time.format("%I:%M:%S %p").parse("12:00:00 pm"))); +console.log(" 12:00:01 pm:", f(d3.time.format("%I:%M:%S %p").parse("12:00:01 pm"))); +console.log(" 11:59:59 PM:", f(d3.time.format("%I:%M:%S %p").parse("11:59:59 PM"))); +console.log(""); diff --git a/tests/test-time-parse.out b/tests/test-time-parse.out new file mode 100644 index 00000000..1d2ff5be --- /dev/null +++ b/tests/test-time-parse.out @@ -0,0 +1,64 @@ +parse a m/d/Y: + Sun 01/01/1990: Mon Jan 1 00:00:00 1990 + Wed 01/01/1990: Mon Jan 1 00:00:00 1990 + XXX 01/01/1990: null + +parse A m/d/Y: + Sunday 01/01/1990: Mon Jan 1 00:00:00 1990 + Wednesday 01/01/1990: Mon Jan 1 00:00:00 1990 + Caturday 01/01/1990: null + +parse m/d/y: + 1/1/90: Sun Jan 1 00:00:00 2090 + 1/1/10: Fri Jan 1 00:00:00 2010 + +parse x: + 1/1/90: Sun Jan 1 00:00:00 2090 + 1/1/10: Fri Jan 1 00:00:00 2010 + +parse b d Y: + jan 01, 1990: Mon Jan 1 00:00:00 1990 + jan 1, 1990: Mon Jan 1 00:00:00 1990 + 1 Feb., 1990: Thu Feb 1 00:00:00 1990 + 01 Feb., 1990: Thu Feb 1 00:00:00 1990 + 1 Feb., 1990: Thu Feb 1 00:00:00 1990 + 1 Feb., 1990: Thu Feb 1 00:00:00 1990 + Moy 1 1990: null + +parse B d Y: + January 01, 1990: Mon Jan 1 00:00:00 1990 + january 1, 1990: Mon Jan 1 00:00:00 1990 + 1 February, 1990: Thu Feb 1 00:00:00 1990 + 01 February, 1990: Thu Feb 1 00:00:00 1990 + 1 February, 1990: Thu Feb 1 00:00:00 1990 + 1 February, 1990: Thu Feb 1 00:00:00 1990 + Juin 1 1990: null + +parse c: + Mon Jan 1 00:00:00 1990: Mon Jan 1 00:00:00 1990 + Sun Jan 1 00:00:00 1990: Mon Jan 1 00:00:00 1990 + Mon Jan 01 00:00:00 1990: Mon Jan 1 00:00:00 1990 + Mon Jan 1 00:00:00 1990: Mon Jan 1 00:00:00 1990 + Mon Jan 1 0:0:0 1990: Mon Jan 1 00:00:00 1990 + +parse H M S: + 00:00:00: Mon Jan 1 00:00:00 1900 + 11:59:59: Mon Jan 1 11:59:59 1900 + 12:00:00: Mon Jan 1 12:00:00 1900 + 12:00:01: Mon Jan 1 12:00:01 1900 + 23:59:59: Mon Jan 1 23:59:59 1900 + +parse X: + 00:00:00: Mon Jan 1 00:00:00 1900 + 11:59:59: Mon Jan 1 11:59:59 1900 + 12:00:00: Mon Jan 1 12:00:00 1900 + 12:00:01: Mon Jan 1 12:00:01 1900 + 23:59:59: Mon Jan 1 23:59:59 1900 + +parse I M S p: + 12:00:00 am: Mon Jan 1 00:00:00 1900 + 11:59:59 AM: Mon Jan 1 11:59:59 1900 + 12:00:00 pm: Mon Jan 1 12:00:00 1900 + 12:00:01 pm: Mon Jan 1 12:00:01 1900 + 11:59:59 PM: Mon Jan 1 23:59:59 1900 +