changeset 13:1c1e538d7df7

Fixed date display; before, prettyDate() was mistaking ISO-8601 GMT for local time.
author Atul Varma <varmaa@toolness.com>
date Mon, 08 Mar 2010 22:47:15 -0800
parents ea3ec9f460db
children 1ece61eda826
files dashboard.js pretty-date.js
diffstat 2 files changed, 43 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/dashboard.js	Mon Mar 08 21:58:54 2010 -0800
+++ b/dashboard.js	Mon Mar 08 22:47:15 2010 -0800
@@ -5,9 +5,7 @@
 
       bugs.forEach(
         function(bug) {
-          var parseableTime = bug.last_change_time.replace(/-/g,"/");
-          parseableTime = parseableTime.replace(/[TZ]/g," ");
-          lctimes[bug.id] = new Date(parseableTime);
+          lctimes[bug.id] = dateFromISO8601(bug.last_change_time);
         });
 
       function compare(a, b) {
@@ -39,6 +37,7 @@
             row.addClass(bug.priority);
             row.addClass(bug.severity);
           }
+          console.log(bug.last_change_time, bug.summary);
           row.find(".last-changed").text(prettyDate(bug.last_change_time));
 
           row.click(
@@ -89,22 +88,10 @@
                       });
     }
 
-    // Taken from MDC @ Core_JavaScript_1.5_Reference/Objects/Date.
-    function ISODateString(d) {
-      function pad(n) { return n < 10 ? '0' + n : n; }
-
-      return (d.getUTCFullYear() + '-' +
-              pad(d.getUTCMonth() + 1) + '-' +
-              pad(d.getUTCDate()) + 'T' + 
-              pad(d.getUTCHours()) + ':' +
-              pad(d.getUTCMinutes()) + ':' +
-              pad(d.getUTCSeconds()) + 'Z');
-    }
-
     function timeAgo(ms) {
       var now = new Date();
       var then = new Date(now - ms);
-      return ISODateString(then);
+      return dateToISO8601(then);
     }
 
     const MS_PER_HOUR = 1000 * 60 * 60;
--- a/pretty-date.js	Mon Mar 08 21:58:54 2010 -0800
+++ b/pretty-date.js	Mon Mar 08 22:47:15 2010 -0800
@@ -1,3 +1,42 @@
+// Taken from MDC @ Core_JavaScript_1.5_Reference/Objects/Date.
+function dateToISO8601(d) {
+  function pad(n) { return n < 10 ? '0' + n : n; }
+
+  return (d.getUTCFullYear() + '-' +
+          pad(d.getUTCMonth() + 1) + '-' +
+          pad(d.getUTCDate()) + 'T' + 
+          pad(d.getUTCHours()) + ':' +
+          pad(d.getUTCMinutes()) + ':' +
+          pad(d.getUTCSeconds()) + 'Z');
+}
+
+// Taken from http://delete.me.uk/2005/03/iso8601.html
+function dateFromISO8601(string) {
+    var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
+        "(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
+        "(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
+    var d = string.match(new RegExp(regexp));
+
+    var offset = 0;
+    var date = new Date(d[1], 0, 1);
+
+    if (d[3]) { date.setMonth(d[3] - 1); }
+    if (d[5]) { date.setDate(d[5]); }
+    if (d[7]) { date.setHours(d[7]); }
+    if (d[8]) { date.setMinutes(d[8]); }
+    if (d[10]) { date.setSeconds(d[10]); }
+    if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); }
+    if (d[14]) {
+        offset = (Number(d[16]) * 60) + Number(d[17]);
+        offset *= ((d[15] == '-') ? 1 : -1);
+    }
+
+    offset -= date.getTimezoneOffset();
+    var time = (Number(date) + (offset * 60 * 1000));
+    date.setTime(Number(time));
+    return date;
+}
+
 /*
  * JavaScript Pretty Date
  * Copyright (c) 2008 John Resig (jquery.com)
@@ -7,7 +46,7 @@
 // Takes an ISO time and returns a string representing how
 // long ago the date represents.
 function prettyDate(time){
-	var date = new Date((time || "").replace(/-/g,"/").replace(/[TZ]/g," ")),
+	var date = dateFromISO8601(time),
 		diff = (((new Date()).getTime() - date.getTime()) / 1000),
 		day_diff = Math.floor(diff / 86400);