2016-05-20 19 views
0

Ich habe 2 Datetime, und ich möchte Unterschied in Minuten berechnen:berechnet Unterschied betwen zwei Datetime in PHP

$date_reservation=strtotime($_POST['date_reservation']);; 
$dt = new DateTime(); 
$date_annulation = strtotime($dt->format('Y-m-d H:i:s')); 
$attente = (round(abs($date_annulation - $date_reservation)/60)%60); 

Es dauert nur den Unterschied zwischen Minute ohne Stunden.

ich diese Funktion (von PHP-Dokumentation) versucht haben

$interval = $date_annulation->diff($date_reservation); 
$years = $interval->format('%y'); 
$months = $interval->format('%m'); 
$days = $interval->format('%d'); 

Aber es dosn't Arbeit (Fehler 500)

+0

Mögliches Duplikat [? Wie wird die Differenz von Datetime-Feld zu berechnen und jetzt in PHP] (http://stackoverflow.com/questions/10448119/how-to-date-the-difference-of-datetime-field-and-now-in-php) –

+0

'$ date_annula "ist kein' DateTime'-Objekt, sondern ein Unix-Timestamp (int) - daher der Serverfehler – DerVO

Antwort

0

Wenn Sie sind sich der möglichen Ungenauigkeiten bei Verwendung dieses Ansatzes Sie kann vergleichen nur den Unix-Zeitstempel:

$date_reservation = strtotime('2016-05-20 13:30'); 
$date_annulation = strtotime('now'); 
$diff_minutes = round(abs($date_annulation - $date_reservation)/60, 0); 

Das einzige Problem in Ihrem Code ist, dass Sie Ihre mod 60 Minuten (%60). Dies gibt Ihnen natürlich nur die Minuten über den vollen Stunden.

Bitte beachten Sie, dass strtotime die Datetime-Zeichenfolge mit der Zeitzone interpretiert, die auf dem Computer festgelegt ist, auf dem dieser Code ausgeführt wird. Sie können Ihren Code mit date_default_timezone_set() festlegen.

Siehe ein Beispiel auf ideone.com.

+1

Es funktioniert nicht – user3070123

+0

Sie haben ein Problem mit Ihrer Syntax. – ecorvo

+1

@ecorvo thx für den Hinweis. Ich habe es repariert. – DerVO

-1

i geben Sie Code von Zeitdifferenz

<?php 
//$datetime1=strtotime('Y-m-d','time to which difference obtained'); 
$current_time =strtotime(date("Y-m-d H:i:s")); 
//$checkTimeEnd = strtotime('time to which difference obtained'); 
    $checkTimeStart = strtotime('time to which difference obtained'); 
    //echo $current_time; 
    $all = round((($current_time - $checkTimeStart)/60),2); 
    //echo floor($all/(60*60*24)); 

    $test = round($all/60,2); 

    $d = floor ($all/1440); 
    $h = floor (($all - $d * 1440)/60); 
    $m = $all - ($d * 1440) - ($h * 60); 

?> 

print $ d für Datum $ h für Stunden $ m für Minuten

+0

Ich habe es getestet, es hilft mir nicht: es gibt einen falschen Wert: float (0) ($ d) float (0) ($ h) float (0) ($ m) "attente": 64,97, – user3070123

0

Ihr Problem ist, dass $ date_annulation ist kein Datetime-Objekt. Keep it simple strtotime

<?php 
$date_reservation = strtotime($_POST['date_reservation']); 
$date_annulation = strtotime('now'); 
$diff_minutes = ($date_annulation - $date_reservation)/60; 

echo $diff_minutes; 
0

Eine Antwort von 500 Internal Server Error bedeutet, gibt es ein Problem in der PHP-Code. Überprüfen Sie die Serverprotokolldateien (Apache error_log, PHP php_errors.log), um den genauen Ort (Datei und Zeile) und die Ursache herauszufinden.

In der Zwischenzeit der Code, den Sie aus der Dokumentation kopiert nicht funktioniert, weil Sie durch strtotime() ein Verfahren der DateTime Klasse auf einer Zahl (der Wert zurückgegeben versucht anzurufen. Es funktioniert nicht auf diese Weise.

es funktioniert, aber wenn Sie DateTime (und verwandte) Objekte verwenden:

$date_reservation = new DateTime($_POST['date_reservation']); 
$date_annulation = new DateTime('now'); 

$interval = $date_annulation->diff($date_reservation); 
$years = $interval->format('%y'); 
$months = $interval->format('%m'); 
$days = $interval->format('%d'); 
Verwandte Themen