Comment puis-je manipuler les dates pour qu'elles apparaissent comme "juste maintenant" ... "Il ya 5 minutes" ... "Il ya 3 heures" ... "22 juin 2010 à 13:45" de manière similaire à comment SO affiche les dates à côté des réponses/commentaires à chaque question? Pour compliquer davantage les choses, les dates stockées dans ma base de données sont en heure GMT (ce qui est bien), mais je veux qu'ils apparaissent dans le fuseau horaire du navigateur de chaque utilisateur.Comment afficher un cross-browsers de date relative à absolue?
J'ai déjà essayé le joli plugin de date de John Resig: http://bassistance.de/jquery-plugins/jquery-plugin-prettydate/, et je l'ai édité pour qu'il soustrait le décalage de fuseau horaire de l'heure GMT dans la base de données. Cependant, cette solution ne fonctionne que dans FireFox.
est ici la fonction 'prettydate' après que je l'ai ajouté le décalage horaire:
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: J'utilise Python avec des modèles Django (via Google Webapp), et l'objet 'temps' I 'M passant dans un « db.DateTimeProperty() » dans le format iso comme ceci:
<span class="prettyDate" title='{{ q.date.isoformat }}'>{{q.date.isoformat}}</span>
Une question de quelqu'un qui a utilisé occasionnellement Date: ne pouvez-vous pas définir la date en utilisant les méthodes setUTC *()? Ne va-t-il pas se convertir automatiquement en heure locale? – brainjam
Merci, je peux essayer de le faire. Cependant, cela n'aide pas la partie cross browser, ce qui est vraiment le plus gros problème ici. – Cuga