Convertir 2010-04-16 16:30:00 à "Demain après-midi"

Convertir 2010-04-16 16:30:00 à "Demain après-midi" ou convertir une autre date à "cet après-midi", "l'année prochaine", "la semaine prochaine mercredi". Vous obtenez l'image. Quelqu'un connait-il une bibliothèque PHP ou Javascript qui peut le faire?

Je pense que vous pouvez faire un long chemin avec ce qui se dit ici: Calculez le temps relatif en C #
La logique est là, et il n'est pas trop difficile de faire l'équivalent javascript si une solution dans une langue différente vous convient.

Il pourrait y avoir des solutions plus élégantes là-bas (recherche de formatage de langage naturel), mais personnellement je n'ai pas pu en trouver.

Je suggérerais de calculer la distance à partir de now jusqu'à la date de mise en forme et d'utiliser les seuils.

Pseudo solution:

 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 dates passées et futures, tant que vous utiliserez comparer avec la valeur abs de diff . Il y a un délai de temps d'affichage ou un timeunit en vérifiant si diff est positif ou négatif.

Pour le matin, l'après-midi, le soir, etc., il suffit de vérifier l'heure de la date et, en ce qui concerne le type de formatage que vous appuyez, afficher l'heure en tant que nombre (loin) ou en langage naturel (date récente ou proche ).

À partir de ce lien -> Comment calculer le temps relatif?

 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 auto-explicatif …