Frage

Ich versuche, die Anzahl der Tage zwischen zwei Tagen zu berechnen, aber ich bin in Probleme mit der Sommerzeit läuft. Hier ist mein Code:

function date_diff($old_date, $new_date) {
    $offset = strtotime($new_date) - strtotime($old_date);
    return $offset/60/60/24;
}

Werke in Ordnung, solange die Tage sind beide innerhalb der gleichen DST-Periode:

echo date_diff('3/15/09', '3/18/09'); // 3

Aber nicht, wenn sie sind weiter auseinander:

echo date_diff('11/15/08', '3/18/09'); // 122.95833333333

Ich möchte eine gerade Anzahl von Tagen, und kümmern sich nicht um DST. Ich glaube, ich könnte das Ergebnis abzurunden, aber das fühlt sich kludgy. Gibt es eine bessere (leicht) Art und Weise? Ich möchte nicht eine ganze Tag-Parsing-und-counting vermeide-Schaltjahre Sache haben, zu schreiben, wenn ich es vermeiden kann.

. (Anmerkung: dies hat unter PHP 5.1.6 laufen, so dass einige der Datum Features in 5.3 möglicherweise nicht verfügbar)

Ein bisschen mehr Info: Ich werde den Offset und fügen Sie ihn auf andere Datetimes nehmen, die in einem DB sind, und ich möchte nur den Tag Teil zu ändern, nicht die Zeit Teil. Es stellte sich heraus Rundung wird, ohnehin nicht funktionieren, denn wenn ich das tun Zugabe es um eine Stunde in die andere Richtung aussteigt. Vielleicht gibt es einen besseren Ansatz für das gesamte Problem ....

War es hilfreich?

Lösung

könnten Sie http://ca3.php.net/date_default_timezone_set die Zeitzone setzen GMT so wird es keinen ausgeglichen werden.

Alternativ können Sie manuell hinzufügen ein Offset mit der date('I',$timetamp)

if ( date("I") == 1 ) {      // "WE ARE MDT";  
        $timeZone = "MDT";  
} else {  
        $timeZone = "MST";  
}  

Andere Tipps

Termine Kraft in eine Zeitzone zu leben, ohne Sommerzeit, GMT / UTC:

function date_diff($old_date, $new_date) {
  $offset = strtotime($new_date . " UTC") - strtotime($old_date . " UTC");
  return $offset/60/60/24;
}

echo date_diff('3/15/09', '3/18/09'); // 3
echo date_diff('11/15/08', '3/18/09'); // 123

Sie können in einer bestimmten Richtung zwingen Rundung unter Verwendung von floor() oder ceil() .

Ich habe versucht, die ‚UTC‘ steht oben. Didnt Arbeit für mich. Ich stll bekam Dezimalwerte.

Bei Sommer Datum im Datumsbereich ist die Differenz serielle Dezimalteil entweder unter 0,5 oder über sein wird. wenn Datumsbereich Tageslicht Einsparung von 3/15 hat geht der Dezimalwert ist> 0,5, wenn das Tageslicht Datum dezimal abgehend ist <0,5. so dass ich nur in einer Runde () gibt die Differenz Serien setzen und ich die ganzen Zahlen i für die Anzahl der Tage benötigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top