Как я могу манипулировать датами, чтобы они отображались как "только сейчас" ... "5 минут назад" ... "3 часа назад" ... "22 июня 2010 года в 13:45" таким же образом как ТАК отображать даты рядом с ответами / комментариями на каждый вопрос?
Чтобы еще больше усложнить ситуацию, даты, хранящиеся в моей базе данных, соответствуют времени по Гринвичу (что хорошо), но я хочу, чтобы они отображались в часовом поясе браузера каждого пользователя.
Я уже пробовал красивый плагин даты от Джона Ресига: 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));
}
Edit:
Я использую Python с шаблонами Django (через Google Webapp), и объект 'time', который я передаю в 'db.DateTimeProperty ()' в формате iso, выглядит так:
<span class="prettyDate" title='{{ q.date.isoformat }}'>{{q.date.isoformat}}</span>