aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor Minar2010-11-08 10:51:28 -0800
committerIgor Minar2010-11-08 22:49:30 -0800
commitfc9ce9ec075aa21cdf6a79987e4aa152991f6a44 (patch)
treed68ea23ebb8682dcccafe3890d8ff70d07a23a09
parentda17c614441c28907047442997bd4d99cdc6eaa1 (diff)
downloadangular.js-fc9ce9ec075aa21cdf6a79987e4aa152991f6a44.tar.bz2
make angular.String.toDate consider all time fractions as optional
-rw-r--r--CHANGELOG.md1
-rw-r--r--src/apis.js7
-rw-r--r--test/ApiSpecs.js17
3 files changed, 22 insertions, 3 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index af06e98d..5b4f21d3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,7 @@
### Api
- date filter now accepts strings that angular.String.toDate can convert to Date objects
+- angular.String.toDate supports ISO8061 formated strings with all time fractions being optional
### Breaking changes
- we now support ISO 8601 extended format datetime strings (YYYY-MM-DDTHH:mm:ss.SSSZ) as defined
diff --git a/src/apis.js b/src/apis.js
index f8deb6ae..a9a9379d 100644
--- a/src/apis.js
+++ b/src/apis.js
@@ -177,6 +177,8 @@ var angularArray = {
}
};
+var R_ISO8061_STR = /^(\d{4})-(\d\d)-(\d\d)(?:T(\d\d)(?:\:(\d\d)(?:\:(\d\d)(?:\.(\d{3}))?)?)?Z)?$/
+
var angularString = {
'quote':function(string) {
return '"' + string.replace(/\\/g, '\\\\').
@@ -210,11 +212,10 @@ var angularString = {
*/
'toDate':function(string){
var match;
- if (typeof string == 'string' &&
- (match = string.match(/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)\.(\d{3})Z$/))){
+ 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], match[5], match[6], match[7]);
+ date.setUTCHours(match[4]||0, match[5]||0, match[6]||0, match[7]||0);
return date;
}
return string;
diff --git a/test/ApiSpecs.js b/test/ApiSpecs.js
index 344cf5da..81fd9155 100644
--- a/test/ApiSpecs.js
+++ b/test/ApiSpecs.js
@@ -190,8 +190,25 @@ describe('api', function(){
});
it('UTCtoDate', function(){
+ //full ISO8061
expect(angular.String.toDate("2003-09-10T13:02:03.000Z")).
toEqual(new Date("Sep 10 2003 13:02:03 GMT"));
+
+ //no millis
+ expect(angular.String.toDate("2003-09-10T13:02:03Z")).
+ toEqual(new Date("Sep 10 2003 13:02:03 GMT"));
+
+ //no seconds
+ expect(angular.String.toDate("2003-09-10T13:02Z")).
+ toEqual(new Date("Sep 10 2003 13:02:00 GMT"));
+
+ //no minutes
+ expect(angular.String.toDate("2003-09-10T13Z")).
+ toEqual(new Date("Sep 10 2003 13:00:00 GMT"));
+
+ //no time
+ expect(angular.String.toDate("2003-09-10")).
+ toEqual(new Date("Sep 10 2003 00:00:00 GMT"));
});
it('StringFromUTC', function(){