Subtrahieren von zwei Daten in php

Lesezeit: 3 Minuten

Benutzer-Avatar
Dmitri Makowezkijd

Ich habe zwei Daten in PHP

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

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

Dann ziehe ich beide ab

$date2 - $date1

und bekomme

Result:6

Warum ist das Ergebnis 6 und nicht 27? … ? Wie kann ich die beiden Daten subtrahieren und ein Ergebnis basierend auf Monatsunterschieden zurückgeben, während ich die Jahre, Tage und Uhrzeiten subtrahiere?

Benutzer-Avatar
Evan

Teil 1: Warum ist das Ergebnis 6?

Die Daten sind einfach Zeichenfolgen, wenn Sie sie zum ersten Mal subtrahieren. PHP versucht, sie in Ganzzahlen umzuwandeln. Dies geschieht durch Konvertieren bis zur ersten Nichtzahl. Datum2 wird also 6 und Datum1 wird 0.

Teil 2: Wie bringt man es zum Laufen?

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

Konvertieren Sie entsprechend.

  • Muss ich die Sekunden zwischen zwei Zeiten … in Tage umwandeln … gibt es keinen schnelleren Weg?

    – Dmitri Makowezkijd

    6. Mai 2012 um 8:06 Uhr

  • Sekunden an einem Tag = 60*60*24 = 86.400 also dividiere einfach durch das.

    – Evan

    6. Mai 2012 um 8:06 Uhr

  • Tolle Lösung @evan. Daumen hoch (ja)

    – Null Zeiger

    7. Dezember 2013 um 6:42 Uhr


Benutzer-Avatar
Shiplu Mokadim

Verwenden Terminzeit und 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");

  • Dies wird mir die Differenz in Tagen zurückgeben … denn das ist, was ich will … um die Datumsdifferenz zu finden

    – Dmitri Makowezkijd

    6. Mai 2012 um 8:07 Uhr

  • wenn die Differenz mehr als einen Monat beträgt, format("%d") würde das nicht berücksichtigen. Also nicht perfekt! Verwenden echo $date1->diff($date2)->days; stattdessen.

    – Imtiaz

    7. Juli 2018 um 20:57 Uhr


  • Dies ist nicht die richtige Antwort, hauptsächlich weil DateInterval ein schreckliches Objekt ist: $date1 = new DateTime("May 3, 2012"); $date2 = new DateTime("06 Apr 2013"); $date1->diff($date2)->format("%d") // == 2 Ebenfalls, ->days ist manchmal falsch: (new DateInterval("P2Y100D"))->days // === false!

    – Daniel Beardsley

    4. Juni 2020 um 17:49 Uhr


Benutzer-Avatar
ajmal iqbal

Es gibt eine Möglichkeit, mktime zu verwenden, indem Sie das Datum im Zeitstempel erstellen und dann subtrahieren und dann die Datumsfunktion verwenden, um es so anzuzeigen, wie Sie es möchten ….

Eine andere Möglichkeit besteht darin, beide Datumsangaben im gleichen Format zu formatieren und dann zu subtrahieren….

Dritter Weg

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

her Weg

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

Die meisten der vorgestellten Lösungen scheinen zu funktionieren, aber alle vergessen eines: die Zeit.

Nehmen Evan Beispiel:

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

Wenn Sie den Zeitteil nicht kürzen, kann dies zu Mils-Berechnungen führen. Zum Beispiel: Intervall zwischen 2014-05-01 14:00:00 (Ymd) und 2014-05-02 07:00:00 wird 0,xxx sein, nicht 1. Sie sollten den Zeitteil jedes Datums kürzen.

So sollte es sein:

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

Benutzer-Avatar
Romancha KC

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

Dieser Code findet die Datumsdifferenz zwischen zwei Daten.

Hier ist die Ausgabe 27

Benutzer-Avatar
Naveen Kumar

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

Wenn Sie die Methode diff (es gibt ein Dateinterval-Objekt zurück) verwenden möchten, ist die Formatierung mit %a der richtige Weg. Ich meine:

Wenn Sie überprüfen http://php.net/manual/en/dateinterval.format.php

Der richtige Weg ist:

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

Für immer alle Tage

  • ein Methodenname wurde weggelassen, richtig ist: echo $date1->diff($date2)->format(“%a”);

    – Petr Sobotka

    14. Juli 2017 um 20:54 Uhr


1018570cookie-checkSubtrahieren von zwei Daten in php

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy