Come posso manipolare le date in modo che vengano visualizzate come "solo ora" ... "5 minuti fa" ... "3 ore fa" ... "22 giugno 2010 alle 13:45" in modo simile a in che modo SO visualizza le date accanto alle risposte/ai commenti a ciascuna domanda?Come visualizzare un crossover della data relativo-assoluto?
Per complicare ulteriormente le cose, le date memorizzate nel mio database sono in ora GMT (che va bene), ma voglio che vengano visualizzate nel fuso orario del browser di ciascun utente.
Ho già provato il bel plugin per data di John Resig: http://bassistance.de/jquery-plugins/jquery-plugin-prettydate/ e l'ho modificato in modo da sottrarre l'offset del fuso orario dall'ora GMT nel database. Tuttavia, questa soluzione funziona solo in FireFox.
Ecco la funzione 'prettydate' dopo ho aggiunto l'offset fuso orario:
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: sto usando Python con i modelli di Django (tramite Google Webapp), e l'oggetto 'di tempo' I 'm passando un 'db.DateTimeProperty()' nel formato iso in questo modo:
<span class="prettyDate" title='{{ q.date.isoformat }}'>{{q.date.isoformat}}</span>
Una domanda da parte di qualcuno che ha utilizzato solo Data casualmente: non è possibile impostare la data utilizzando i metodi setUTC *()? Non si convertirà automaticamente all'ora locale? – brainjam
Grazie, posso provare a farlo. Tuttavia, ciò non aiuta ancora la parte cross browser, che è davvero il problema più grande qui. – Cuga