2012-05-06 18 views
16

ho avuto due date in phpsottrazione di due date in php

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

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

Poi sottrarre entrambi

$date2 - $date1 

, e ottenere

Result:6 

Perché è il risultato 6 e non 27? ...? Come posso sottrarre le due date e farmi restituire un risultato in base alle differenze mensili sottraendo gli anni & giorni &?

risposta

43

Parte 1: Perché il risultato è 6?

Le date sono semplicemente stringhe quando le sottrai per la prima volta. PHP tenta di convertirli in numeri interi. Lo fa convertendo fino al primo non-numero. Quindi, data2 diventa 6 e la data1 diventa 0.

Parte 2: come si fa a farlo funzionare?

$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; 

Convertire come appropriato.

+0

Ho bisogno di convertire i secondi tra due giorni times..to .. . non c'è un modo più veloce –

+0

secondi in un giorno = 60 * 60 * 24 = 86,400 quindi basta dividere per quello. – evan

+0

Ottima soluzione @evan. Thumbs up (y) – NullPointer

9

Utilizzando DateTime e 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"); 
+0

Questo mi restituirà la differenza in giorni..causa questo è quello che voglio..per trovare la differenza di data –

+0

Non è quello che vuoi? –

+0

sì, è ..... grazie –

12

C'è un modo per utilizzare mktime n pubblica la data in timestamp e quindi sottrarre e quindi utilizzare la funzione data per mostrare nel modo u vuole ....

altro modo è che il formato sia di date nello stesso formato quindi sottrarre ....

Terza via

$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"); 

avanti modo

$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; 
5
$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); 

Questo codice si trova la differenza di data tra due date ..

Qui di uscita è il 27

5

La maggior parte delle soluzioni presentate sembra funzionare, ma tutti dimentica una cosa: il tempo.

Prendendo Evan esempio:

$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; 

Quando non tagliare parte del tempo, ciò che potrebbe portare a milscalculations. Ad esempio: Intervallo tra 2014-05-01 14:00:00 (Y-m-d) e 2014-05-02 07:00:00 sarà 0, xxx, non 1. È necessario ridurre la parte del tempo di ogni data.

quindi dovrebbe essere:

$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; 
0
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

Se si desidera utilizzare diff (che restituisce un oggetto DateInterval) metodo, il modo corretto è quello di formattare con un%.Voglio dire:

Se si controlla http://php.net/manual/en/dateinterval.format.php

Il modo corretto è:

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

Per ottenere tutti i giorni

+0

un nome di metodo è stato omesso, corretto è: echo $ date1-> diff ($ date2) -> formato ("% a"); –

+0

sei vero, modificherò la mia risposta. Grazie –