J'essaie de convertir un horodatage du format 2009-09-12 20:57:19
et de le transformer en quelque chose comme 3 minutes ago
avec PHP.
J'ai trouvé un script utile pour le faire, mais je pense qu'il cherche un format différent à utiliser comme variable temporelle. Le script que je souhaite modifier pour travailler avec ce format est:
function _ago($tm,$rcs = 0) {
$cur_tm = time();
$dif = $cur_tm-$tm;
$pds = array('second','minute','hour','day','week','month','year','decade');
$lngh = array(1,60,3600,86400,604800,2630880,31570560,315705600);
for($v = sizeof($lngh)-1; ($v >= 0)&&(($no = $dif/$lngh[$v])<=1); $v--); if($v < 0) $v = 0; $_tm = $cur_tm-($dif%$lngh[$v]);
$no = floor($no);
if($no <> 1)
$pds[$v] .='s';
$x = sprintf("%d %s ",$no,$pds[$v]);
if(($rcs == 1)&&($v >= 1)&&(($cur_tm-$_tm) > 0))
$x .= time_ago($_tm);
return $x;
}
Je pense que sur ces premières lignes, le script essaie de faire quelque chose qui ressemble à ceci (mathématiques de format de date différent):
$dif = 1252809479 - 2009-09-12 20:57:19;
Comment pourrais-je convertir mon horodatage en ce format (Unix?)?
Réponses:
Exemple d'utilisation:
L'entrée peut être n'importe quel format de date et d'heure pris en charge .
Production :
Fonction :
la source
$full
devrait être une entrée de chaîne pour filtrer la sortie selon les besoins). par exempletime_elapsed_string($datetime, $format = "ymw")
. Version PS Flat: stackoverflow.com/a/5010169/318765$full = false
à$level = 7
etif (!$full) $string = array_slice($string, 0, 1);
vers$string = array_slice($string, 0, $level);
et appeleztime_elapsed_string($datetime, 2)
pour obtenir uniquement les deux chaînes de date les plus élevées. Je pense que cela devrait répondre à tous les besoins.Unknown property (w)
à cette ligne$diff->w = floor($diff->d / 7);
Unknown property (w)
en PHP5.3 et versions antérieures, convertissez $ diff d'un objet en tableau et ajustez le reste du code en conséquence. J'ai le correctif publié ici: stackoverflow.com/a/32723846/235633la source
30days for month
, et12x30days for year
, à cause de cela, il renverra un nombre d'années non valide en dessous de l'année <= 1978. Exemple où il renvoie 39 ans, mais il devrait 38. Et cela ne fonctionne pas non plus pour ans en dessous de 1970.la source
C'est en fait une meilleure solution que j'ai trouvée. Utilise jQuery mais il fonctionne parfaitement. De plus, il s'actualise automatiquement de la même manière que SO et Facebook, vous n'avez donc pas à actualiser la page pour voir les mises à jour.
Ce plugin lira votre
datetime
attr dans le<time>
tag et le remplira pour vous.http://timeago.yarp.com/
la source
Je ne sais pas pourquoi personne ne mentionne encore Carbon.
https://github.com/briannesbitt/Carbon
Il s'agit en fait d'une extension de php dateTime (qui était déjà utilisée ici) et elle a: la méthode diffForHumans. Il vous suffit donc de:
plus d'exemples: http://carbon.nesbot.com/docs/#api-humandiff
Avantages de cette solution:
la source
J'ai trouvé des résultats comme le laid suivant:
Pour cette raison, j'ai réalisé une fonction qui respecte les pluriels, supprime les valeurs vides et éventuellement il est possible de raccourcir la sortie:
Ressemble beaucoup mieux:
Utilisez éventuellement
$level = 2
pour le raccourcir comme suit:Supprimez la
$lang
pièce si vous en avez besoin uniquement en anglais ou modifiez cette traduction en fonction de vos besoins:la source
explode
etarray_combine
.la source
J'ai un peu modifié la fonction d'origine pour être (à mon avis plus utile, ou logique).
la source
je l'ai fait et ça fonctionne très bien, cela fonctionne à la fois pour l'horodatage Unix
1470919932
ou le temps formaté comme16-08-11 14:53:30
la source
switch (true)
même si cela$time
sera évaluétrue
?Juste pour ajouter une autre option ...
Bien que je préfère la publication de la méthode DateTime ici , je n'ai pas aimé le fait qu'elle affiche 0 ans, etc.
la source
ça vous aide à le vérifier
la source
J'utilise habituellement cela pour découvrir la différence entre
current
etpassed
datetime stamp
PRODUCTION
CODE
la source
Je sais qu'il y a plusieurs réponses ici, mais c'est ce que j'ai trouvé. Cela ne gère que les valeurs MySQL DATETIME selon la question d'origine à laquelle je répondais. Le tableau $ a a besoin d'un peu de travail. Je me réjouis des commentaires sur la façon de s'améliorer. Appelez comme:
echo time_elapsed_string ('2014-11-14 09:42:28');
la source
J'ai essayé et ça marche bien pour moi
Vérifiez ce lien pour référence ici
Merci! et amusez-vous.
la source
C'est ce que j'ai choisi. C'est une version modifiée du message d'Abbbas Khan:
la source
De nombreuses solutions ici ne tiennent pas compte de l'arrondissement. Par exemple:
L'événement s'est produit à 15 heures il y a deux jours. Si vous vérifiez à 14h, cela s'affichera il y a un jour. Si vous vérifiez à 16 heures, il y aura deux jours.
Si vous travaillez avec unix, cela aide:
Ce n'est pas parfait si vous vous inquiétez des secondes intercalaires et de l'heure d'été.
la source
Essayez ceci, je l'ai trouvé à partir de mes anciens codes, qui montre le résultat correct
Exemple:
echo ago('2020-06-03 00:14:21 AM');
Production:
6 days
la source
Vous devrez prendre chaque morceau individuel de votre horodatage et le convertir en temps Unix. Par exemple pour l'horodatage, 2009-09-12 20:57:19.
(((2008-1970) * 365) + (8 * 30) +12) * 24 + 20 vous donnerait une estimation BRUTE des heures depuis le 1er janvier 1970.
Prenez ce nombre, multipliez par 60 et ajoutez 57 pour obtenir les minutes.
Prenez cela, multipliez par 60 et ajoutez 19.
Cela le convertirait cependant de manière très approximative et inexacte.
Y a-t-il une raison pour laquelle vous ne pouvez pas simplement prendre le temps Unix normal pour commencer?
la source
Il y a un problème avec la langue d'affichage il y a quelque temps, par exemple en arabe il y a 3 formats nécessaires pour afficher la date. J'utilise ces fonctions dans mes projets, j'espère qu'ils peuvent aider quelqu'un (toute suggestion ou amélioration, je serai utile :))
la source
la source
Voici ma solution s'il vous plaît vérifier et modifier selon vos besoins
Merci
la source
la source
Cette fonction n'est pas conçue pour être utilisée pour la langue anglaise. J'ai traduit les mots en anglais. Cela nécessite plus de corrections avant d'utiliser l'anglais.
la source
Utilisation de:
Fonction:
la source
Réponse légèrement modifiée d'en haut:
la source
Ce qui suit est une solution très simple et extrêmement efficace.
écho temps écoulé (1201570814);
Exemple de sortie:
6 ans 4 mois 3 semaines 4 jours 12 heures 40 minutes et 36 secondes.
la source
Voici ma solution pour un module de notification que j'ai construit il y a quelque temps. Il renvoie une sortie similaire à la liste déroulante des notifications de Facebook (par exemple, il y a 1 jour, maintenant, etc.).
la source
il suffit de passer l'heure de la date à cette fonction. il serait imprimé au format il y a longtemps pour vous
la source
J'utilise la fonction suivante depuis plusieurs années. Et cela fonctionne bien:
la source