Wie lässt sich die Gesamtzahl der Sekunden zwischen zwei Daten am besten berechnen? Bisher habe ich etwas in der Art versucht:
$delta = $date->diff(new DateTime('now'));
$seconds = $delta->days * 60 * 60 * 24;
Die days
Eigenschaft des DateInterval-Objekts scheint jedoch im aktuellen PHP5.3-Build fehlerhaft zu sein (zumindest unter Windows wird immer der gleiche 6015
Wert zurückgegeben). Ich habe auch versucht, dies auf eine Weise zu tun, bei der die Anzahl der Tage in jedem Monat (Runden auf 30), die Schaltjahre usw. nicht erhalten bleiben:
$seconds = ($delta->s)
+ ($delta->i * 60)
+ ($delta->h * 60 * 60)
+ ($delta->d * 60 * 60 * 24)
+ ($delta->m * 60 * 60 * 24 * 30)
+ ($delta->y * 60 * 60 * 24 * 365);
Aber ich bin wirklich nicht glücklich mit dieser halbherzigen Lösung.
$delta->format("%r%s")
?format
ist, wenn sagen, die Anzahl der Sekunden ist 0, während die Anzahl der Minuten 1 ist,$delta->format("%r%s")
stellt sich heraus, 0 zu sein :(Antworten:
Könnten Sie nicht stattdessen die Zeitstempel vergleichen ?
quelle
getTimestamp()
Methode in PHP> = 5.3.0 verfügbar ist.format('U')
stattdessengetTimestamp()
.Mit dieser Funktion können Sie die Gesamtdauer eines DateInterval-Objekts in Sekunden abrufen
quelle
$endTime
und$reference
untereinander ersetzen , da dies ein Minus-Ergebnis mit einem zukünftigen Intervall-Datum / Uhrzeit-Wert ergibt.Sie könnten es so machen:
time () gibt die aktuelle Zeit in Sekunden seit der Epochenzeit (1970-01-01T00: 00: 00) zurück, und strtotime macht dasselbe, jedoch basierend auf einem bestimmten Datum / einer bestimmten Uhrzeit, die Sie angeben.
quelle
quelle
Es fühlt sich immer gut an, wenn das, was Sie brauchen, bereits als Klasse vorhanden ist. In Ihrem Fall benötigen Sie insgesamt Sekunden. Warum nicht eine Klasse daraus machen? Der Code könnte so aussehen:
Sie sind nicht nur intuitiv, sondern können auch von der automatischen Vervollständigung Ihrer IDE profitieren.
Weitere nützliche Implementierungen finden Sie in dieser Bibliothek .
quelle
Sie können einfach die harten Zahlen eingeben (anstelle von 60 * 60 - 3600 eingeben), damit sie nicht jedes Mal berechnet werden müssen.
Bearbeiten - Die Nummer wurde basierend auf Ihrem Kommentar korrigiert.
quelle