Convertir 2010-04-16 16:30:00 à "Demain après-midi" ou convertir une autre date à "cet après-midi", "l'année prochaine", "Mercredi prochain". Vous obtenez l'image. Quelqu'un sait-il une bibliothèque PHP ou Javascript qui peut le faire?Convertir 2010-04-16 16:30:00 à "Demain après-midi"
Répondre
Je pense que vous pouvez venir un long chemin avec ce qui est dit ici: Calculate relative time in C#
La logique est là, et il est pas trop difficile de faire le javascript équivalent si une solution dans un vous convient le mieux en langues différentes.
Il pourrait y avoir des solutions plus élégantes (cherchez le formatage en langage naturel), mais personnellement, je n'en ai pas trouvé.
Je suggère de calculer la distance de now
à la date du formatage et d'utiliser les seuils.
solution Pseudo:
diff = now - date
if (diff < one_day)
format for today
if (diff < two_days)
format for tomorrow
if (diff < one_week)
format using days from now
.
.
.
La comparaison fonctionnera pour les deux dates passées et futures, aussi longtemps que vous utilisez comparer à la valeur abs
de diff
. Afficher l'heure actuelle ou timounit à partir de maintenant en vérifiant si diff
est positif ou négatif. Pour le matin, l'après-midi, le soir, etc., il vous suffit de vérifier l'heure du jour et le type de formatage que vous avez choisi, soit afficher l'heure sous forme de chiffres (très éloignés), soit en langage naturel (date récente ou proche).
De ce lien ->How do I calculate relative time?
function posted(t) {
var now = new Date();
var diff = parseInt((now.getTime() - Date.parse(t))/1000);
if (diff < 60) { return 'less than a minute ago'; }
else if (diff < 120) { return 'about a minute ago'; }
else if (diff < (2700)) { return (parseInt(diff/60)).toString() + ' minutes ago'; }
else if (diff < (5400)) { return 'about an hour ago'; }
else if (diff < (86400)) { return 'about ' + (parseInt(diff/3600)).toString() + ' hours ago'; }
else if (diff < (172800)) { return '1 day ago'; }
else {return (parseInt(diff/86400)).toString() + ' days ago'; }
}
function gett($sam){
$times = time() - $sam;
if ($times == 60){
$times = "a minute ago";
}
if (($times != 1) && ($times < 60) && ($times != 0)){
$times = "$times seconds ago";
}
if ($times == 0){
$times = "less than a second ago";
}
if ($times == 1){
$times = "a second ago";
}
if ($times > 60 && $times < 3600){
$times = ceil($times/60)." minutes ago";
}
if($times == 3600){
$times = "an hour ago";
}
if($times > 3600 && $times < 86400){
$times = ceil($times/3600)." hours ago";
}
if($times == 86400){
$times = "a day ago";
}
if($times > 86400){
$times = ceil($times/86400)." days ago";
}
return $times; }
Utilisation: $ mis à jour = gett ($ timestamp); où timestamp $ est assez explicite ..
Devrait être 'diff = date - now' pour les dates futures, et il est un peu plus compliqué que cela, car la différence de moins d'un jour pourrait être encore demain. – Duncan
Peu importe tant que vous comparez la valeur absolue de 'diff'. Mais sinon vous avez raison, les dates à comparer à devraient être minuit timestamps pour les dates de treshold. –
Félicitations pour> 1000 – nik