2009-10-05 18:11:08Obtenir intervalle secondes entre deux datetime en PHP?
2009-10-05 18:07:13
Cela devrait générer 235, comment le faire?
2009-10-05 18:11:08Obtenir intervalle secondes entre deux datetime en PHP?
2009-10-05 18:07:13
Cela devrait générer 235, comment le faire?
Vous pouvez utiliser strtotime() à faire:
$diff = strtotime('2009-10-05 18:11:08') - strtotime('2009-10-05 18:07:13')
Remarque: Assurez-vous que vous utilisez le capital "H" pendant des heures (mode 24h) lorsque votre temps "inférieur" est "maintenant" et que vous utilisez 'date()' pour obtenir la date de maintenant ('date (" Ymd H: i: s ")'). –
strtotime("2009-10-05 18:11:08") - strtotime("2009-10-05 18:07:13")
PHP Date de référence Le temps est utile pour des choses comme ceci: PHP Date Time Functions
strtotime() est probablement la meilleure façon.
$seconds = strtotime('2009-10-05 18:11:08') - strtotime('2009-10-05 18:07:13')
Avec les objets DateTime, vous pouvez le faire comme ceci:
$date = new DateTime('2009-10-05 18:07:13');
$date2 = new DateTime('2009-10-05 18:11:08');
$diffInSeconds = $date2->getTimestamp() - $date->getTimestamp();
Cela prend également en compte l'heure d'été! – Brainware
C'est la solution la plus élégante à la question. Cela devrait être la réponse acceptée. –
En raison des limites d'époque unix, vous pourriez avoir des problèmes dates compairing avant 1970 et après 2038. je choisir de perdre la précision (= ne regardez pas la seconde unique) mais évitez de passer à travers les conversions d'époque unix (getTimestamp). Cela dépend de ce que vous faites ...
Dans mon cas, l'utilisation de 365 à la place (12 * 30) et "30" comme durée mensuelle moyenne, a réduit l'erreur dans une sortie utilisable.
function DateIntervalToSec($start,$end){ // as datetime object returns difference in seconds
$diff = $end->diff($start);
$diff_sec = $diff->format('%r').(// prepend the sign - if negative, change it to R if you want the +, too
($diff->s)+ // seconds (no errors)
(60*($diff->i))+ // minutes (no errors)
(60*60*($diff->h))+ // hours (no errors)
(24*60*60*($diff->d))+ // days (no errors)
(30*24*60*60*($diff->m))+ // months (???)
(365*24*60*60*($diff->y)) // years (???)
);
return $diff_sec;
}
Notez que l'erreur peut être 0, si les quantités "moyennes" sont destinées à diff. Les docs PHP ne parle pas de cette ... Dans un mauvais cas, l'erreur pourrait être:
Je préfère croire que quelqu'un a décidé d'examiner « m » comme les 30 jours et « y » 365, en chargeant "d" avec la différence quand "diff" marche creux non-30 jours mois ...
Si quelqu'un sait quelque chose de plus à ce sujet et peut fournir une documentation officielle, soyez les bienvenus!
Utilisez la propriété days au lieu de la propriété d pour obtenir les jours exacts entre les deux jours. Donc, pas de résultats inexacts là-bas. – Nilz11
double possible de [Calculer secondes au total en PHP DateInterval] (http://stackoverflow.com/questions/3176609/calculate-total-seconds-in-php-dateinterval) – FactoryAidan