Jak manipulować datami, aby wyświetlały się jako "właśnie teraz" ... "5 minut temu" ... "3 godziny temu" ... "22 czerwca 2010 o 13:45" w podobny sposób jak jak SO wyświetla daty obok odpowiedzi/komentarzy do każdego pytania?Jak wyświetlać względne do bezwzględnych przeglądarki o różnych datach?
Aby jeszcze bardziej skomplikować sprawy, daty przechowywane w mojej bazie danych są w czasie GMT (co jest w porządku), ale chcę, aby pojawiły się w strefie czasowej przeglądarki każdego użytkownika.
Wypróbowałem już wtyczkę z datą piękną John'a Resig: http://bassistance.de/jquery-plugins/jquery-plugin-prettydate/ i zredagowałem ją tak, aby odejmowała przesunięcie strefy czasowej od czasu GMT w bazie danych. Jednak to rozwiązanie działa tylko w FireFox.
Oto funkcja 'prettydate' po Dodałem strefę czasową offset:
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: Używam Pythona w szablonach Django (przez Google webapp), a 'czas' obiekt I „m przechodzącą w«db.DateTimeProperty()»w formacie iso tak:
<span class="prettyDate" title='{{ q.date.isoformat }}'>{{q.date.isoformat}}</span>
Pytanie od kogoś, kto używał tylko daty Niedokładnie: nie możesz ustawić daty za pomocą metody setUTC *()? Czy nie po prostu automatycznie przekształci się w czas lokalny? – brainjam
Dzięki, mogę spróbować to zrobić. Jednak to nadal nie pomaga w przypadku przeglądarki krzyżowej, która jest tutaj naprawdę większym problemem. – Cuga