From 030a63aaee44c7416392cb30b6a46bee3f0a5d6f Mon Sep 17 00:00:00 2001 From: Kai Groner Date: Fri, 5 Nov 2010 00:12:03 -0400 Subject: [PATCH 1/4] make date filter handle ISO 8601 dates/times --- src/filters.js | 2 ++ test/FiltersSpec.js | 4 ++++ test/angular-mocks.js | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/src/filters.js b/src/filters.js index 206da240adc8..d119db46ce6f 100644 --- a/src/filters.js +++ b/src/filters.js @@ -194,6 +194,8 @@ angularFilter.date = function(date, format) { if (isNumber(date)) { date = new Date(date); + } else if (isString(date) && Date.parse(date)) { + date = new Date(date); } else if (!(date instanceof Date)) { return date; } diff --git a/test/FiltersSpec.js b/test/FiltersSpec.js index 0de7b5b71301..ea84c3558e4a 100644 --- a/test/FiltersSpec.js +++ b/test/FiltersSpec.js @@ -115,6 +115,10 @@ describe('filter', function(){ expect(filter.date(noon.getTime() + "")).toEqual(noon.toLocaleDateString()); }); + it('should be able to parse ISO 8601 dates/times using', function() { + expect(filter.date(noon.toISOString())).toEqual(noon.toLocaleDateString()); + }); + it('should accept format', function() { expect(filter.date(morning, "yy-MM-dd HH:mm:ss")). toEqual('10-09-03 07:05:08'); diff --git a/test/angular-mocks.js b/test/angular-mocks.js index f13ca763f032..925d8ab79692 100644 --- a/test/angular-mocks.js +++ b/test/angular-mocks.js @@ -243,6 +243,10 @@ function TzDate(offset, timestamp) { return offset * 60; }; + this.toISOString = function() { + return this.date.toISOString(); + }; + //hide all methods not implemented in this mock that the Date prototype exposes var unimplementedMethods = ['getDay', 'getMilliseconds', 'getTime', 'getUTCDate', 'getUTCDay', 'getUTCFullYear', 'getUTCHours', 'getUTCMilliseconds', 'getUTCMinutes', 'getUTCMonth', From 84d50927c809db1d826884657c476cc533a7fc9a Mon Sep 17 00:00:00 2001 From: Kai Groner Date: Fri, 5 Nov 2010 16:45:53 -0400 Subject: [PATCH 2/4] date filter: attempt parsing anything that can .toString() fold in isNumber check for compressability as suggested by Elliott Sprehn --- src/filters.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/filters.js b/src/filters.js index d119db46ce6f..b3c2ef65966d 100644 --- a/src/filters.js +++ b/src/filters.js @@ -192,9 +192,7 @@ angularFilter.date = function(date, format) { date = parseInt(date, 10); } - if (isNumber(date)) { - date = new Date(date); - } else if (isString(date) && Date.parse(date)) { + if (isNumber(date) || Date.parse(date.toString())) { date = new Date(date); } else if (!(date instanceof Date)) { return date; From 8d0f3c3ffcef70ae9e354364dbaf2a50b6332e81 Mon Sep 17 00:00:00 2001 From: Kai Groner Date: Fri, 5 Nov 2010 16:47:32 -0400 Subject: [PATCH 3/4] date filter: avoid calling null.toString() to pass falsy values test --- src/filters.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/filters.js b/src/filters.js index b3c2ef65966d..cccd118ab229 100644 --- a/src/filters.js +++ b/src/filters.js @@ -192,7 +192,7 @@ angularFilter.date = function(date, format) { date = parseInt(date, 10); } - if (isNumber(date) || Date.parse(date.toString())) { + if (date && (isNumber(date) || Date.parse(date.toString()))) { date = new Date(date); } else if (!(date instanceof Date)) { return date; From 0c0f44f2c6c8ff066a988511a3d30d91cdf7a8fe Mon Sep 17 00:00:00 2001 From: Kai Groner Date: Fri, 5 Nov 2010 16:50:43 -0400 Subject: [PATCH 4/4] date filter: instanceof Date test before Date.parse test to preserve TzDate classes --- src/filters.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/filters.js b/src/filters.js index cccd118ab229..c6248cb7c448 100644 --- a/src/filters.js +++ b/src/filters.js @@ -192,9 +192,10 @@ angularFilter.date = function(date, format) { date = parseInt(date, 10); } - if (date && (isNumber(date) || Date.parse(date.toString()))) { + if (date instanceof Date) { + } else if (date && (isNumber(date) || Date.parse(date.toString()))) { date = new Date(date); - } else if (!(date instanceof Date)) { + } else { return date; }