我如何操纵日期以便它们显示为“刚刚”...“5分钟前”...“3小时前”...“2010年6月22日下午1:45”以类似的方式SO如何显示每个问题的答案/评论旁边的日期?
更复杂的是,我的数据库中存储的日期是GMT时间(很好),但我希望它们出现在每个用户浏览器的时区中。
我已经尝试了John Resig的漂亮日期插件:http://bassistance.de/jquery-plugins/jquery-plugin-prettydate/,我编辑了它,以便从数据库中的GMT时间中减去时区偏移量。但是,此解决方案仅适用于FireFox。
在我添加时区偏移后,这是'prettydate'功能:
format : function(time) {
var date = new Date(time);
var currentDate = new Date();
var timezoneOffsetInMilliseconds = currentDate.getTimezoneOffset() * 60000;
var currentTimeInMillisecondsUtc = currentDate.getTime();
var givenTimeInMillisecondsUtc = date.getTime()- timezoneOffsetInMilliseconds;
var diffInSeconds = ((currentTimeInMillisecondsUtc - givenTimeInMillisecondsUtc) / 1000);
var day_diff = Math.floor(diffInSeconds / 86400);
if (isNaN(day_diff) || day_diff < 0)
return;
// If longer than a month, calculate the date w/ timezone offset
if (day_diff >= 31)
return new Date(givenTimeInMillisecondsUtc).toLocaleString();
var messages = $.prettyDate.messages;
return day_diff == 0 && (diffInSeconds < 60 && messages.now
|| diffInSeconds < 120 && messages.minute
|| diffInSeconds < 3600
&& messages.minutes(Math.floor(diffInSeconds / 60))
|| diffInSeconds < 7200 && messages.hour || diffInSeconds < 86400
&& messages.hours(Math.floor(diffInSeconds / 3600)))
|| day_diff == 1 && messages.yesterday || day_diff < 7
&& messages.days(day_diff) || day_diff < 31
&& messages.weeks(Math.ceil(day_diff / 7));
}
编辑: 我正在使用带有Django模板的Python(通过Google Webapp),以及我以iso格式传递'db.DateTimeProperty()'的'time'对象,如下所示:
<span class="prettyDate" title='{{ q.date.isoformat }}'>{{q.date.isoformat}}</span>
答案 0 :(得分:2)
为什么不在服务器端使用内置模板标记timesince或自定义模板标记?
在相对时间内,对于时区没有意义,只要你正在进行的2次传播是在同一个区域。对于过去距离较远的结果,并且您希望以绝对时间呈现,您将不得不自己做时间转移。为此,您必须ask the user for her timezone (or use some JS on a previous page to send it to you)并将其存储在用户个人资料中。
还讨论了in the mailing list。