【发布时间】:2011-03-08 09:14:13
【问题描述】:
如何操作日期,以便它们以类似的方式显示为“刚刚”...“5 分钟前”...“3 小时前”...“2010 年 6 月 22 日下午 1:45” SO如何在每个问题的答案/cmets旁边显示日期?
更复杂的是,存储在我的数据库中的日期是 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));
}
编辑: 我正在将 Python 与 Django 模板(通过 Google Webapp)一起使用,并且我正在以 iso 格式传入“db.DateTimeProperty()”的“时间”对象,如下所示:
<span class="prettyDate" title='{{ q.date.isoformat }}'>{{q.date.isoformat}}</span>
【问题讨论】:
-
一个只随便用过Date的人的问题:不能用setUTC*()方法设置日期吗?它不会自动转换为当地时间吗?
-
谢谢,我可以试试。但是,这仍然对跨浏览器部分没有帮助,这确实是这里更大的问题。
标签: javascript jquery django cross-browser