From e5c135ac50bfb463895c71a9b83267e9ca836c7b Mon Sep 17 00:00:00 2001 From: Igor Minar Date: Mon, 8 Nov 2010 09:05:48 -0800 Subject: Support ISO 8601 extended datetime format troughout angular. Support ISO 8601 extended format datetime strings (YYYY-MM-DDTHH:mm:ss.SSSZ) as defined in EcmaScript 5 throughout angular. This means that the following apis switched from YYYY-MM-DDTHH:mm:ssZ to YYYY-MM-DDTHH:mm:ss.SSSZ (note the added millis) when representing dates: - angular.Date.toString - angular.String.toDate - JSON serialization and deserialization (used by json filter, $xhr and $resource) --- src/apis.js | 18 +++++++++--------- src/filters.js | 2 +- src/parser.js | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/apis.js b/src/apis.js index c232e4a9..effb70d7 100644 --- a/src/apis.js +++ b/src/apis.js @@ -211,10 +211,10 @@ var angularString = { 'toDate':function(string){ var match; if (typeof string == 'string' && - (match = string.match(/^(\d\d\d\d)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)Z$/))){ + (match = string.match(/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)\.(\d{3})Z$/))){ var date = new Date(0); date.setUTCFullYear(match[1], match[2] - 1, match[3]); - date.setUTCHours(match[4], match[5], match[6], 0); + date.setUTCHours(match[4], match[5], match[6], match[7]); return date; } return string; @@ -223,14 +223,14 @@ var angularString = { var angularDate = { 'toString':function(date){ - function pad(n) { return n < 10 ? "0" + n : n; } return !date ? date : - date.getUTCFullYear() + '-' + - pad(date.getUTCMonth() + 1) + '-' + - pad(date.getUTCDate()) + 'T' + - pad(date.getUTCHours()) + ':' + - pad(date.getUTCMinutes()) + ':' + - pad(date.getUTCSeconds()) + 'Z' ; + padNumber(date.getUTCFullYear(), 4) + '-' + + padNumber(date.getUTCMonth() + 1, 2) + '-' + + padNumber(date.getUTCDate(), 2) + 'T' + + padNumber(date.getUTCHours(), 2) + ':' + + padNumber(date.getUTCMinutes(), 2) + ':' + + padNumber(date.getUTCSeconds(), 2) + '.' + + padNumber(date.getUTCMilliseconds(), 3) + 'Z'; } }; diff --git a/src/filters.js b/src/filters.js index ee0ef076..a166abad 100644 --- a/src/filters.js +++ b/src/filters.js @@ -169,7 +169,7 @@ var NUMBER_STRING = /^\d+$/; * * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200‒1200) * * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or - * number) or ISO 8601 string (yyyy-MM-ddTHH:mm:ssZ). + * number) or ISO 8601 extended datetime string (yyyy-MM-ddTHH:mm:ss.SSSZ). * @param {string=} format Formatting rules. If not specified, Date#toLocaleDateString is used. * @returns {string} Formatted string or the input if input is not recognized as date/millis. * diff --git a/src/parser.js b/src/parser.js index 77800209..97d5740d 100644 --- a/src/parser.js +++ b/src/parser.js @@ -26,7 +26,7 @@ var OPERATORS = { var ESCAPE = {"n":"\n", "f":"\f", "r":"\r", "t":"\t", "v":"\v", "'":"'", '"':'"'}; function lex(text, parseStringsForObjects){ - var dateParseLength = parseStringsForObjects ? 20 : -1, + var dateParseLength = parseStringsForObjects ? 24 : -1, tokens = [], token, index = 0, -- cgit v1.2.3