diff options
| -rw-r--r-- | CHANGELOG.md | 8 | ||||
| -rw-r--r-- | src/apis.js | 18 | ||||
| -rw-r--r-- | src/filters.js | 2 | ||||
| -rw-r--r-- | src/parser.js | 2 | ||||
| -rw-r--r-- | test/ApiSpecs.js | 9 | ||||
| -rw-r--r-- | test/FiltersSpec.js | 8 | ||||
| -rw-r--r-- | test/JsonSpec.js | 6 | ||||
| -rw-r--r-- | test/angular-mocksSpec.js | 10 | 
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); | 
