Mercurial > bugzilla-dashboard
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);