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:
Tim Schaub
2010-08-18 15:11:27 +00:00
parent 9ae54040db
commit fc9e67318e
2 changed files with 272 additions and 0 deletions

View File

@@ -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>