2017-03-08 3 views
-1

Also ich habe ein Array von vielen Bildern mit ihren Datumzeiten im Format Y-m-d H:i:s Und ich möchte die Anzahl der Tage zwischen dem Bilddatum und dem aktuellen Datum finden. Dies ist, wo ich bis jetzt erreicht habe ... und ich bekomme einen neuen Fehler für jede kleine Änderung, die ich mache.Wie finde ich die Anzahl der Stunden zwischen zwei Tagen?

$myDateTime = DateTime::createFromFormat('Y-m-d H:i:s', $current_time); 
$currentDate = $myDateTime->format('Y-m-d'); 

foreach($all_images as $key => $am){ 

     $myDateTime1 = DateTime::createFromFormat('Y-m-d H:i:s', $am['datetime']); 
     $imageDate = $myDateTime1->format('Y-m-d'); 

     $datediff=date_diff($currentDate,$imageDate); 
     echo $datediff; 
} 

Ich erhalte diese Fehlermeldung: Warning: date_diff() expects parameter 1 to be DateTimeInterface, string given

Jede mögliche Hilfe würde geschätzt! Danke vielmals!

+0

Normalerweise ist es am einfachsten, wenn Sie mit Datumsberechnungen arbeiten, beide Daten in Sekunden - seit der Epoche - zu konvertieren und sie dann einfach zu vergleichen. – neuhaus

+0

Oder Sie könnten einfach Ihre zwei Zeitstempel subtrahieren und das Ergebnis durch 3600 teilen. – Jerodev

+0

@Jerodev Ich habe das gemacht, aber dann bekomme ich null – meagler

Antwort

2

Sie haben Ihre Werte in Strings konvertiert, bevor Sie sie vergleichen. Es wird also nicht mehr der Unterschied zwischen zwei Daten verglichen, sondern der Unterschied zwischen zwei Strings. Dies ist Ihre Fehlerursache.

Lösung:
Die Werte, die Sie date_diff passieren two DateTime objects gemäß der Handbuch sein müssen:

(PHP 5 >= 5.3.0, PHP 7)
DateTime::diff -- DateTimeImmutable::diff -- DateTimeInterface::diff -- date_diff — Returns the difference between two DateTime objects

Vorschlag:

foreach($all_images as $key => $am){ 

     $myDateTime1 = DateTime::createFromFormat('Y-m-d H:i:s', $am['datetime']); 
     $imageDate = $myDateTime1->format('Y-m-d'); 

     $datediff=date_diff($myDateTime, $myDateTime1); 
     echo $datediff->format('%R%a days'); // +2 days 
} 

Beachten Sie, dass die oben date_diff Funktion dauert Objects nicht strings.

Dies wird nun verwenden date_diff [prozedural in diesem Beispiel] zur Ausgabe eines Differenzwert $datediff, die Sie mit DateTime formatting verwenden können, um die Anzahl der Tage/Stunden zu erreichen/was auch immer. Bitte Read the manual.

+0

Vielen Dank ! Es funktionierte! habe meinen Fehler gefunden! – meagler

+0

Gut gut! Ich nehme es, wenn Sie einfach das Objekt anstelle der '-> formatierten Version verwendet haben, die es behoben hat? – Martin

+0

Ja genau! Danke wieder mann: D – meagler

Verwandte Themen