Adding OpenLayers.Date utility functions to parse and serialize dates. The date string format parsed complies with ECMA-262 (v5) section 15.9.1.15, derived from the profile of ISO 8601 for date and time on the Internet (http://tools.ietf.org/html/rfc3339). Where available (and functional) the native date.toISOString and Date.parse methods will be used. r=ahocevar (closes #2778)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@10630 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -357,7 +357,159 @@
|
||||
|
||||
}
|
||||
|
||||
function test_Date_toISOString(t) {
|
||||
t.plan(3);
|
||||
|
||||
var date, str;
|
||||
|
||||
// check valid date
|
||||
date = new Date(Date.UTC(2010, 10, 27, 18, 19, 15, 123));
|
||||
str = OpenLayers.Date.toISOString(date);
|
||||
t.eq(str, "2010-11-27T18:19:15.123Z", "valid date");
|
||||
|
||||
// check zero padding
|
||||
date = new Date(Date.UTC(2010, 7, 7, 18, 9, 5, 12));
|
||||
str = OpenLayers.Date.toISOString(date);
|
||||
t.eq(str, "2010-08-07T18:09:05.012Z", "zero padding");
|
||||
|
||||
// check invalid date
|
||||
date = new Date("foo");
|
||||
str = OpenLayers.Date.toISOString(date);
|
||||
t.eq(str, "Invalid Date", "invalid date");
|
||||
|
||||
}
|
||||
|
||||
function test_Date_parse(t) {
|
||||
|
||||
t.plan(93);
|
||||
|
||||
var cases = {
|
||||
"2000": {
|
||||
year: 2000,
|
||||
month: 0,
|
||||
date: 1
|
||||
},
|
||||
"2005-10": {
|
||||
year: 2005,
|
||||
month: 9,
|
||||
date: 1
|
||||
},
|
||||
"1971-07-23": {
|
||||
year: 1971,
|
||||
month: 6,
|
||||
date: 23
|
||||
},
|
||||
"1801-11-20T04:30:15Z": {
|
||||
year: 1801,
|
||||
month: 10,
|
||||
date: 20,
|
||||
hour: 4,
|
||||
minutes: 30,
|
||||
seconds: 15
|
||||
},
|
||||
"1989-06-15T18:30:15.91Z": {
|
||||
year: 1989,
|
||||
month: 5,
|
||||
date: 15,
|
||||
hour: 18,
|
||||
minutes: 30,
|
||||
seconds: 15,
|
||||
milliseconds: 910
|
||||
},
|
||||
"1989-06-15T18:30:15.091Z": {
|
||||
year: 1989,
|
||||
month: 5,
|
||||
date: 15,
|
||||
hour: 18,
|
||||
minutes: 30,
|
||||
seconds: 15,
|
||||
milliseconds: 91
|
||||
},
|
||||
"1989-06-15T13:30:15.091-05": {
|
||||
year: 1989,
|
||||
month: 5,
|
||||
date: 15,
|
||||
hour: 18,
|
||||
minutes: 30,
|
||||
seconds: 15,
|
||||
milliseconds: 91
|
||||
},
|
||||
"2010-08-06T15:21:25-06": { // MDT
|
||||
year: 2010,
|
||||
month: 7,
|
||||
date: 6,
|
||||
hour: 21,
|
||||
minutes: 21,
|
||||
seconds: 25
|
||||
},
|
||||
"2010-08-07T06:21:25+9": { // JSP
|
||||
year: 2010,
|
||||
month: 7,
|
||||
date: 6,
|
||||
hour: 21,
|
||||
minutes: 21,
|
||||
seconds: 25
|
||||
},
|
||||
"2010-08-07T02:51:25+05:30": { // IST
|
||||
year: 2010,
|
||||
month: 7,
|
||||
date: 6,
|
||||
hour: 21,
|
||||
minutes: 21,
|
||||
seconds: 25
|
||||
},
|
||||
"T21:51:25Z": {
|
||||
hour: 21,
|
||||
minutes: 51,
|
||||
seconds: 25
|
||||
},
|
||||
"T02:51:25+05:30": { // IST
|
||||
hour: 21,
|
||||
minutes: 21,
|
||||
seconds: 25
|
||||
},
|
||||
"T2:51:25.1234-7": { // lenient
|
||||
hour: 9,
|
||||
minutes: 51,
|
||||
seconds: 25,
|
||||
milliseconds: 123
|
||||
}
|
||||
};
|
||||
|
||||
var o, got, exp;
|
||||
for (var str in cases) {
|
||||
o = cases[str];
|
||||
got = OpenLayers.Date.parse(str);
|
||||
exp = new Date(Date.UTC(o.year || 0, o.month || 0, o.date || 1, o.hour || 0, o.minutes || 0, o.seconds || 0, o.milliseconds || 0));
|
||||
if ("year" in o) {
|
||||
t.eq(got.getUTCFullYear(), exp.getUTCFullYear(), str + ": correct UTCFullYear");
|
||||
t.eq(got.getUTCMonth(), exp.getUTCMonth(), str + ": correct UTCMonth");
|
||||
t.eq(got.getUTCDate(), exp.getUTCDate(), str + ": correct UTCDate");
|
||||
} else {
|
||||
t.ok(true, str + ": ECMA doesn't specify how years are handled in time only strings");
|
||||
t.ok(true, str + ": ECMA doesn't specify how months are handled in time only strings");
|
||||
t.ok(true, str + ": ECMA doesn't specify how days are handled in time only strings");
|
||||
}
|
||||
if ("hour" in o) {
|
||||
t.eq(got.getUTCHours(), exp.getUTCHours(), str + ": correct UTCHours");
|
||||
t.eq(got.getUTCMinutes(), exp.getUTCMinutes(), str + ": correct UTCMinutes");
|
||||
t.eq(got.getUTCSeconds(), exp.getUTCSeconds(), str + ": correct UTCSeconds");
|
||||
t.eq(got.getUTCMilliseconds(), exp.getUTCMilliseconds(), str + ": correct UTCMilliseconds");
|
||||
} else {
|
||||
t.ok(true, str + ": ECMA doesn't specify how hours are handled in date only strings");
|
||||
t.ok(true, str + ": ECMA doesn't specify how minutes are handled in date only strings");
|
||||
t.ok(true, str + ": ECMA doesn't specify how seconds are handled in date only strings");
|
||||
t.ok(true, str + ": ECMA doesn't specify how milliseconds are handled in date only strings");
|
||||
}
|
||||
}
|
||||
|
||||
// check invalid date parsing
|
||||
var invalid = OpenLayers.Date.parse("foo");
|
||||
t.ok(invalid instanceof Date, "invalid is a date");
|
||||
t.ok(isNaN(invalid.getTime()), "invalid has no time");
|
||||
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
Reference in New Issue
Block a user