[FIX] parsing of UTC datetime data from server
authorXavier Morel <xmo@openerp.com>
Mon, 12 Dec 2011 12:35:57 +0000 (13:35 +0100)
committerXavier Morel <xmo@openerp.com>
Mon, 12 Dec 2011 12:35:57 +0000 (13:35 +0100)
lp bug: https://launchpad.net/bugs/902439 fixed

bzr revid: xmo@openerp.com-20111212123557-4bfqmgjnpkv0nsha

addons/web/static/src/js/dates.js
addons/web/static/test/formats.js

index 7861dd2..907eaa3 100644 (file)
@@ -20,7 +20,7 @@ openerp.web.str_to_datetime = function(str) {
     if ( !res ) {
         throw new Error("'" + str + "' is not a valid datetime");
     }
-    var obj = Date.parse(res[1] + " GMT");
+    var obj = Date.parseExact(res[1] + " UTC", 'yyyy-MM-dd HH:mm:ss zzz');
     if (! obj) {
         throw new Error("'" + str + "' is not a valid datetime");
     }
@@ -43,7 +43,7 @@ openerp.web.str_to_date = function(str) {
     if ( !res ) {
         throw new Error("'" + str + "' is not a valid date");
     }
-    var obj = Date.parse(str);
+    var obj = Date.parseExact(str + ' UTC', 'yyyy-MM-dd zzz');
     if (! obj) {
         throw new Error("'" + str + "' is not a valid date");
     }
@@ -66,7 +66,7 @@ openerp.web.str_to_time = function(str) {
     if ( !res ) {
         throw new Error("'" + str + "' is not a valid time");
     }
-    var obj = Date.parse(res[1]);
+    var obj = Date.parseExact(res[1] + ' UTC', 'HH:mm:ss zzz');
     if (! obj) {
         throw new Error("'" + str + "' is not a valid time");
     }
index cde11a1..9a8f39b 100644 (file)
@@ -1,5 +1,43 @@
 $(document).ready(function () {
     var openerp;
+
+    module('server-formats', {
+        setup: function () {
+            openerp = window.openerp.init();
+            window.openerp.web.core(openerp);
+            window.openerp.web.dates(openerp);
+        }
+    });
+    test('Parse server datetime', function () {
+        var date = openerp.web.str_to_datetime("2009-05-04 12:34:23");
+        deepEqual(
+            [date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(),
+             date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()],
+            [2009, 5 - 1, 4, 12, 34, 23]);
+        deepEqual(
+            [date.getFullYear(), date.getMonth(), date.getDate(),
+             date.getHours(), date.getMinutes(), date.getSeconds()],
+            [2009, 5 - 1, 4, 12 - (date.getTimezoneOffset() / 60), 34, 23]);
+
+        var date2 = openerp.web.str_to_datetime('2011-12-10 00:00:00');
+        deepEqual(
+            [date2.getUTCFullYear(), date2.getUTCMonth(), date2.getUTCDate(),
+             date2.getUTCHours(), date2.getUTCMinutes(), date2.getUTCSeconds()],
+            [2011, 12 - 1, 10, 0, 0, 0]);
+    });
+    test('Parse server date', function () {
+        var date = openerp.web.str_to_date("2009-05-04");
+        deepEqual(
+            [date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()],
+            [2009, 5 - 1, 4]);
+    });
+    test('Parse server time', function () {
+        var date = openerp.web.str_to_time("12:34:23");
+        deepEqual(
+            [date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()],
+            [12, 34, 23]);
+    });
+
     module('web-formats', {
         setup: function () {
             openerp = window.openerp.init();