aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md8
-rw-r--r--src/apis.js18
-rw-r--r--src/filters.js2
-rw-r--r--src/parser.js2
-rw-r--r--test/ApiSpecs.js9
-rw-r--r--test/FiltersSpec.js8
-rw-r--r--test/JsonSpec.js6
-rw-r--r--test/angular-mocksSpec.js10
8 files changed, 36 insertions, 27 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 26d0823c..af06e98d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,14 @@
### Api
- date filter now accepts strings that angular.String.toDate can convert to Date objects
+### Breaking changes
+- we now 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.fromDate
+ - JSON serialization and deserialization (used by json filter, $xhr and $resource)
+
# <angular/> 0.9.2 faunal-mimicry (2010-11-03) #
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,
diff --git a/test/ApiSpecs.js b/test/ApiSpecs.js
index 8969e1bf..344cf5da 100644
--- a/test/ApiSpecs.js
+++ b/test/ApiSpecs.js
@@ -185,18 +185,19 @@ describe('api', function(){
it('DateToUTC', function(){
var date = new Date("Sep 10 2003 13:02:03 GMT");
assertEquals("date", angular.Object.typeOf(date));
- assertEquals("2003-09-10T13:02:03Z", angular.Date.toString(date));
+ assertEquals("2003-09-10T13:02:03.000Z", angular.Date.toString(date));
assertEquals(date.getTime(), angular.String.toDate(angular.Date.toString(date)).getTime());
});
it('UTCtoDate', function(){
- expect(angular.String.toDate("2003-09-10T13:02:03Z")).toEqual(new Date("Sep 10 2003 13:02:03 GMT"));
+ expect(angular.String.toDate("2003-09-10T13:02:03.000Z")).
+ toEqual(new Date("Sep 10 2003 13:02:03 GMT"));
});
it('StringFromUTC', function(){
- var date = angular.String.toDate("2003-09-10T13:02:03Z");
+ var date = angular.String.toDate("2003-09-10T13:02:03.000Z");
assertEquals("date", angular.Object.typeOf(date));
- assertEquals("2003-09-10T13:02:03Z", angular.Date.toString(date));
+ assertEquals("2003-09-10T13:02:03.000Z", angular.Date.toString(date));
assertEquals("str", angular.String.toDate("str"));
});
diff --git a/test/FiltersSpec.js b/test/FiltersSpec.js
index ddbac273..34a627da 100644
--- a/test/FiltersSpec.js
+++ b/test/FiltersSpec.js
@@ -95,9 +95,9 @@ describe('filter', function(){
describe('date', function(){
- var morning = new TzDate(+5, '2010-09-03T12:05:08Z'); //7am
- var noon = new TzDate(+5, '2010-09-03T17:05:08Z'); //12pm
- var midnight = new TzDate(+5, '2010-09-03T05:05:08Z'); //12am
+ var morning = new TzDate(+5, '2010-09-03T12:05:08.000Z'); //7am
+ var noon = new TzDate(+5, '2010-09-03T17:05:08.000Z'); //12pm
+ var midnight = new TzDate(+5, '2010-09-03T05:05:08.000Z'); //12am
it('should ignore falsy inputs', function() {
@@ -130,7 +130,7 @@ describe('filter', function(){
});
it('should be able to parse ISO 8601 dates/times using', function() {
- var isoString = '2010-09-03T05:05:08Z';
+ var isoString = '2010-09-03T05:05:08.872Z';
expect(filter.date(isoString)).
toEqual(angular.String.toDate(isoString).toLocaleDateString());
});
diff --git a/test/JsonSpec.js b/test/JsonSpec.js
index e6264293..0acbd79c 100644
--- a/test/JsonSpec.js
+++ b/test/JsonSpec.js
@@ -62,9 +62,9 @@ describe('json', function(){
});
it('should serialize UTC dates', function() {
- var date = angular.String.toDate("2009-10-09T01:02:03Z");
- expect(toJson(date)).toEqual('"2009-10-09T01:02:03Z"');
- expect(fromJson('"2009-10-09T01:02:03Z"').getTime()).toEqual(date.getTime());
+ var date = angular.String.toDate("2009-10-09T01:02:03.027Z");
+ expect(toJson(date)).toEqual('"2009-10-09T01:02:03.027Z"');
+ expect(fromJson('"2009-10-09T01:02:03.027Z"').getTime()).toEqual(date.getTime());
});
it('should prevent recursion', function() {
diff --git a/test/angular-mocksSpec.js b/test/angular-mocksSpec.js
index 3daa1428..b96a9cfc 100644
--- a/test/angular-mocksSpec.js
+++ b/test/angular-mocksSpec.js
@@ -10,8 +10,8 @@ describe('TzDate', function() {
});
it('should take dateString as constructor argument', function() {
- expect(new TzDate(0, '1970-01-01T00:00:00Z').getTime()).toBe(0);
- expect(new TzDate(0, '2010-09-03T23:05:08Z').getTime()).toBe(1283555108000);
+ expect(new TzDate(0, '1970-01-01T00:00:00.000Z').getTime()).toBe(0);
+ expect(new TzDate(0, '2010-09-03T23:05:08.023Z').getTime()).toBe(1283555108023);
});
@@ -88,7 +88,7 @@ describe('TzDate', function() {
it('should create a date representing new year in Bratislava', function() {
- var newYearInBratislava = new TzDate(-1, '2009-12-31T23:00:00Z');
+ var newYearInBratislava = new TzDate(-1, '2009-12-31T23:00:00.000Z');
expect(newYearInBratislava.getTimezoneOffset()).toBe(-60);
expect(newYearInBratislava.getFullYear()).toBe(2010);
expect(newYearInBratislava.getMonth()).toBe(0);
@@ -100,7 +100,7 @@ describe('TzDate', function() {
it('should delegate all the UTC methods to the original UTC Date object', function() {
//from when created from string
- var date1 = new TzDate(-1, '2009-12-31T23:00:00Z');
+ var date1 = new TzDate(-1, '2009-12-31T23:00:00.000Z');
expect(date1.getUTCFullYear()).toBe(2009);
expect(date1.getUTCMonth()).toBe(11);
expect(date1.getUTCDate()).toBe(31);
@@ -110,7 +110,7 @@ describe('TzDate', function() {
//from when created from millis
- var date2 = new TzDate(-1, angular.String.toDate('2009-12-31T23:00:00Z').getTime());
+ var date2 = new TzDate(-1, angular.String.toDate('2009-12-31T23:00:00.000Z').getTime());
expect(date2.getUTCFullYear()).toBe(2009);
expect(date2.getUTCMonth()).toBe(11);
expect(date2.getUTCDate()).toBe(31);