$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
Jak przekonwertować powyższy $interval
do sekundy w phpKonwersja DateInterval sprzeciw wobec sekund w php
$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
Jak przekonwertować powyższy $interval
do sekundy w phpKonwersja DateInterval sprzeciw wobec sekund w php
Istnieje funkcja format
do tego. Ale nie zwróci liczby sekund. Aby uzyskać liczbę sekund, by użyć tej metody
$seconds = abs($datetime1->getTimestamp()-$datetime2->getTimestamp());
Jeśli naprawdę chcesz używać $interval
potrzebne do jego obliczenia.
$seconds = $interval->days*86400 + $interval->h*3600
+ $interval->i*60 + $interval->s;
Tutaj
86400
jest liczbą sekund w dniu3600
jest liczbą sekund godzinę60
jest w sekundach na minutęInnym sposobem uzyskania liczby sekund w interwale i s, aby dodać go do dnia zerowego i uzyskać znacznik czasowy tym dniu:
$seconds = date_create('@0')->add($interval)->getTimestamp();
Ta metoda będzie obsługiwać przedziały utworzone przez contructor DateInterval mniej lub bardziej poprawnie, natomiast shiplu's answer zignoruje lat, miesięcy i dni dla takich interwały. Odpowiedź shiplu jest jednak dokładniejsza w przypadku interwałów, które zostały utworzone przez odjęcie dwóch dat. W przypadku interwałów składających się tylko z godzin, minut i sekund obie metody uzyskają poprawną odpowiedź.
@Brilliand Dlaczego to rozwiązanie jest mniej dokładne dla odstępów czasu, które zostały utworzone przez odjęcie dwóch dat? Nie rozumiem jak. Możesz wytłumaczyć ? – MaxiWheat
@MaxiWheat Powiedz, że przedział czasu został utworzony przez odjęcie 2015-02-01 od 2015-03-01. To różnica jednego miesiąca, która wynosi 28 dni. Metoda Shiplu potraktuje to jako 28-dniową przerwę, podczas gdy moja metoda potraktuje ją jako interwał jednomiesięczny, arbitralnie wybierze styczeń jako miesiąc i wytworzy znacznik czasu na podstawie 31 dni w styczniu. – Brilliand
Dodam tylko shiplu's answer:
function dateIntervalToSeconds($interval)
{
$seconds = $interval->days*86400 + $interval->h*3600
+ $interval->i*60 + $interval->s;
return $interval->invert == 1 ? $seconds*(-1) : $seconds;
}
Aby obsłużyć ujemnych interwały.
Należy pamiętać, że - w przeciwieństwie do Brilliand's answer - Powyższy kod rozpatrzy prawidłowo lata, miesiące i daty. Ponieważ $ interval-> days jest wartością bezwzględną ($ interval-> d jest zależne od miesiąca).
EDIT: ta funkcja jest nadal nie skorygować, jak wskazano przez @Brilliand. Przykład ten to
new DateInterval('P4M3DT2H');
Nie radzi sobie dobrze z miesiącami.
Przykładem przedziału, w którym to wystąpi, jest 'new DateInterval ('P4M3DT2H')'. Wypróbuj i zobacz - zmienna 'days' jest pusta, pomimo przedziału obejmującego w przybliżeniu 123 dni. – Brilliand
W przyszłości, jeśli masz zamiar mnie oskarżyć o bycie złym, proszę, abyś to zrobił w komentarzu do mojej odpowiedzi. Długo to zauważyłem. – Brilliand
@Brilliand, masz rację. Odpowiednio zredagowałem swoją odpowiedź. –
powraca '0 sekund' – sanchitkhanna26
@MarkBaker tak, to dlatego zmieniono moją odpowiedź –
Świetnie! Mam to działa. Dziękujemy @shiplu – sanchitkhanna26