2009-10-05 9 views

Répondre

55

Vous pouvez utiliser strtotime() à faire:

$diff = strtotime('2009-10-05 18:11:08') - strtotime('2009-10-05 18:07:13') 
+0

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 ")'). –

2
strtotime("2009-10-05 18:11:08") - strtotime("2009-10-05 18:07:13") 
7

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') 
107

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(); 
+0

Cela prend également en compte l'heure d'été! – Brainware

+0

C'est la solution la plus élégante à la question. Cela devrait être la réponse acceptée. –

4

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:

  • 0 secondes si diff est appliqué à des intervalles de temps < 1 mois
  • 0 à 3 jours si diff est appliquée à des intervalles de temps> 1 mois
  • 0 à 14 jours si diff est appliqué à des intervalles de temps> 1 an

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!

+0

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

Questions connexes