diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Angular.js | 3 | ||||
| -rw-r--r-- | src/JSON.js | 21 |
2 files changed, 16 insertions, 8 deletions
diff --git a/src/Angular.js b/src/Angular.js index 3ce8e7df..3c5bfa4b 100644 --- a/src/Angular.js +++ b/src/Angular.js @@ -73,8 +73,7 @@ var $boolean = 'boolean', angularModule, /** @name angular.module.ng */ nodeName_, - uid = ['0', '0', '0'], - DATE_ISOSTRING_LN = 24; + uid = ['0', '0', '0']; /** * @ngdoc function diff --git a/src/JSON.js b/src/JSON.js index 983a53e8..83d1e927 100644 --- a/src/JSON.js +++ b/src/JSON.js @@ -47,7 +47,7 @@ function fromJson(json, useNative) { // TODO make forEach optionally recursive and remove this function // TODO(misko): remove this once the $http service is checked in. function transformDates(obj) { - if (isString(obj) && obj.length === DATE_ISOSTRING_LN) { + if (isString(obj) && 15 <= obj.length && obj.length <= 24) { return jsonStringToDate(obj); } else if (isArray(obj) || isObject(obj)) { forEach(obj, function(val, name) { @@ -58,16 +58,25 @@ function fromJson(json, useNative) { } } -var R_ISO8061_STR = /^(\d{4})-(\d\d)-(\d\d)(?:T(\d\d)(?:\:(\d\d)(?:\:(\d\d)(?:\.(\d{3}))?)?)?Z)?$/; +var R_ISO8061_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?:\:?(\d\d)(?:\:?(\d\d)(?:\.(\d{3}))?)?)?(Z|([+-])(\d\d):?(\d\d)))?$/; function jsonStringToDate(string){ var match; - if (isString(string) && (match = string.match(R_ISO8061_STR))){ - var date = new Date(0); - date.setUTCFullYear(match[1], match[2] - 1, match[3]); - date.setUTCHours(match[4]||0, match[5]||0, match[6]||0, match[7]||0); + if (match = string.match(R_ISO8061_STR)) { + var date = new Date(0), + tzHour = 0, + tzMin = 0; + if (match[9]) { + tzHour = int(match[9] + match[10]); + tzMin = int(match[9] + match[11]); + } + date.setUTCFullYear(int(match[1]), int(match[2]) - 1, int(match[3])); + date.setUTCHours(int(match[4]||0) - tzHour, int(match[5]||0) - tzMin, int(match[6]||0), int(match[7]||0)); return date; } return string; + function int(str) { + return parseInt(str, 10); + } } function jsonDateToString(date){ |
