Quelle est la meilleure façon de calculer le nombre total de secondes entre deux dates? Jusqu'à présent, j'ai essayé quelque chose du genre:
$delta = $date->diff(new DateTime('now'));
$seconds = $delta->days * 60 * 60 * 24;
Cependant, la days
propriété de l'objet DateInterval semble être cassée dans la version actuelle de PHP5.3 (au moins sous Windows, elle renvoie toujours la même 6015
valeur). J'ai également essayé de le faire d'une manière qui ne permettrait pas de conserver le nombre de jours dans chaque mois (tours à 30), les années bissextiles, etc.
$seconds = ($delta->s)
+ ($delta->i * 60)
+ ($delta->h * 60 * 60)
+ ($delta->d * 60 * 60 * 24)
+ ($delta->m * 60 * 60 * 24 * 30)
+ ($delta->y * 60 * 60 * 24 * 365);
Mais je ne suis vraiment pas content d'utiliser cette solution à moitié folle.
$delta->format("%r%s")
?format
c'est quand disons que le nombre de secondes est 0 alors que le nombre de minutes est 1,$delta->format("%r%s")
se révèle être 0 :(Réponses:
Ne pourriez-vous pas comparer les horodatages à la place?
la source
getTimestamp()
méthode est disponible en PHP> = 5.3.0.format('U')
place degetTimestamp()
.Cette fonction vous permet d'obtenir la durée totale en secondes d'un objet DateInterval
la source
$endTime
et les$reference
unes avec les autres, car cela me donne un résultat négatif avec une valeur de date / heure d'intervalle futur.Vous pouvez le faire comme ceci:
time () renvoie l'heure actuelle en secondes depuis l'heure de l'époque (1970-01-01T00: 00: 00), et strtotime fait de même, mais en fonction d'une date / heure spécifique que vous donnez.
la source
la source
C'est toujours agréable lorsque ce dont vous avez besoin est déjà présent en classe. Dans votre cas, vous avez besoin d'un nombre total de secondes. Pourquoi ne pas en faire une classe? Le code pourrait ressembler à ça:
En plus d'être intuitif, vous pouvez également bénéficier de la fonction de saisie semi-automatique de votre IDE.
Pour une implémentation plus utile, vous pouvez consulter cette bibliothèque .
la source
Vous pouvez simplement entrer les nombres précis (au lieu de 60 * 60 - mettez 3600) pour qu'il n'ait pas besoin de les calculer à chaque fois.
Modifier - a fixé le nombre en fonction de votre commentaire.
la source