web-dev-qa-db-fra.com

Soustraire deux dates en php

J'ai deux dates en php

$date1 = 'May 3, 2012 10:38:22 GMT'

$date2 = '06 Apr 2012 07:22:21 GMT'

Puis je soustrais les deux 

$date2 - $date1

, et obtenir

Result:6

Pourquoi le résultat est 6 et pas 27? ...? Comment puis-je soustraire les deux dates et me faire renvoyer un résultat basé sur les différences de mois tout en soustrayant les années, les jours et l'heure?

22

Partie 1: Pourquoi le résultat est 6? 

Les dates sont simplement des chaînes lorsque vous les soustrayez pour la première fois. PHP tente de les convertir en nombres entiers. Pour ce faire, il convertit jusqu'au premier non-nombre. Donc, date2 devient 6 et date1 devient 0.

Partie 2: Comment l'obtenir au travail?

$datetime1 = strtotime('May 3, 2012 10:38:22 GMT');
$datetime2 = strtotime('06 Apr 2012 07:22:21 GMT');

$secs = $datetime2 - $datetime1;// == <seconds between the two times>
$days = $secs / 86400;

Convertir au besoin.

58
evan

Il existe un moyen d’utiliser mktime n pour créer la date dans l’horodatage, puis soustraire et utiliser ensuite la fonction de date pour indiquer la manière dont vous le souhaitez ....

Une autre façon est que le format des deux dates dans le même format puis soustrait ....

Troisième voie

$date1=  new DateTime("May 3, 2012 10:38:22 GMT");
$date2= new DateTime("06 Apr 2012 07:22:21 GMT");
echo $date1->diff($date2)->("%d");

quatrième voie

$datetime1 = strtotime('May 3, 2012 10:38:22 GMT');
$datetime2 = strtotime('06 Apr 2012 07:22:21 GMT');
$secs = $datetime2 - $datetime1;// == return sec in difference
$days = $secs / 86400;
12
ajmal iqbal

Utilisation de DateTime et DateInterval ,

$date1 = new DateTime("May 3, 2012 10:38:22 GMT");
$date2 = new DateTime("06 Apr 2012 07:22:21 GMT");
echo $date1->diff($date2)->format("%d");
11
Shiplu Mokaddim
$todate= strtotime('May 3, 2012 10:38:22 GMT');
$fromdate= strtotime('06 Apr 2012 07:22:21 GMT');
$calculate_seconds = $todate- $fromdate; // Number of seconds between the two dates
$days = floor($calculate_seconds / (24 * 60 * 60 )); // convert to days
echo($days);

Ce code trouvera la différence de date entre deux dates.

Ici la sortie est 27

5
Romancha KC

La plupart des solutions présentées semblent fonctionner, mais tout le monde oublie une chose: le temps.

Prenant evan exemple:

$datetime1 = strtotime('May 3, 2012 10:38:22 GMT');
$datetime2 = strtotime('06 Apr 2012 07:22:21 GMT');

$secs = $datetime2 - $datetime1;// == <seconds between the two times>
$days = $secs / 86400;

Lorsque vous ne coupez pas le temps, ce qui peut conduire à des calculs mils. Par exemple: L’intervalle entre 2014-05-01 14:00:00 (Y-m-d) et 2014-05-02 07:00:00 sera 0, xxx et non 1. Vous devez ajuster l’heure de chaque date.

Donc ça devrait être:

$datetime1 = strtotime(date('Y-m-d', strtotime('May 3, 2012 10:38:22 GMT')));
$datetime2 = strtotime(date('Y-m-d', strtotime('06 Apr 2012 07:22:21 GMT')));

$secs = $datetime2 - $datetime1;// == <seconds between the two times>
$days = $secs / 86400;
5
ex3v
echo 'time'.$notification_time=  "2008-12-13 10:42:00";
 date_default_timezone_set('Asia/Kolkata');
 echo 'cureen'.$currenttime=date('Y-m-d H:i:s'); 
$now = new DateTime("$notification_time");
$ref = new DateTime("$currenttime");
$diff = $now->diff($ref);
printf('%d days, %d hours, %d minutes', $diff->d, $diff->h, $diff->i);
0
naveen kumar

Si vous souhaitez utiliser la méthode diff (elle retourne un objet Dateinterval), la méthode correcte consiste à formater avec% a. Je veux dire:

Si vous vérifiez http://php.net/manual/en/dateinterval.format.php

La manière correcte est: 

 echo $date1->diff($date2)->format("%a");

Pour tous les jours

0
Daniel Nieto