2011-01-05 12 views
7

Czy jest rodzimy sposób wykonywania "HH:MM:SS" to seconds z PHP 5.3 zamiast robić podział na dwukropek i mnożenie każdej sekcji odpowiedniej liczby, aby obliczyć sekundy?Jak przekonwertować ciąg "HH: MM: SS" na sekundy za pomocą PHP?


Na przykład w Pythonie można zrobić:

string time = "00:01:05"; 
double seconds = TimeSpan.Parse(time).TotalSeconds; 

+2

Równowartość byłaby 'DateInterval :: createFromDateString ('00: 01: 05') -> Format (arg);' ale niestety, nie ma argument [ 'formatowi] (http : //de.php.net/manual/en/dateinterval.format.php), która zwróci całkowitą liczbę sekund (w przeciwieństwie do łącznej liczby dni). – Gordon

+0

@ Glavić To drugie pytanie jest nowsze niż to. – benjisail

Odpowiedz

22

Szybki sposób:

echo strtotime('01:00:00') - strtotime('TODAY'); // 3600 
+0

tak, szybki sposób w liniach kodu, ale nie szybki pod względem szybkości - strtotime() jest bardzo powolną funkcją. – Spudley

+1

@Spudley: Właściwie to nie jest, w porównaniu z kombinacją 'list',' explode', 'mktime'. Benchmarking mówi mi, że 'strtotime' jest szybszy, chociaż kogo to obchodzi, to mikrooptymalizacja. – netcoder

+1

Chciałbym zobaczyć pewne testy porównawcze. 'strtotime()' robi dużo pracy z ciągiem, aby go przetworzyć; Byłbym bardzo zaskoczony, gdyby mógł działać szybciej niż mktime(). (Szczerze mówiąc, pomnożenie według pierwotnego pytania jest prawdopodobnie najszybszą opcją). – Spudley

7

To powinno załatwić sprawę:

list($hours,$mins,$secs) = explode(':',$time); 
$seconds = mktime($hours,$mins,$secs) - mktime(0,0,0); 
+1

Mam nadzieję, że nie masz nic przeciwko, ja zredagowałem twoją odpowiedź. Jeśli pominiesz opcjonalne parametry '$ month',' $ day' i '$ year' z' mktime() ', użyje on bieżącego miesiąca, dnia i roku. Musisz więc odjąć sekundy od bieżącej daty o północy, aby uzyskać tylko sekundy od określonego '$ czasu'. – Travesty3

+0

@ Travesty3 - bez problemu; edytowanie odpowiedzi jest częścią etosu tej witryny, więc jeśli widzisz taką, która wymaga edycji, idź przed nią i edytuj ją. – Spudley

+0

@ Travesty3: Myślę, że ustawienie daty 1970-1-1 byłoby szybsze, ponieważ jest to jedno wywołanie 'mktime' zamiast 2. Przykład użycia:' $ seconds = mktime ($ godziny, $ mins, $ secs, 1 1,1970); ' –

2

Niestety nie - ponieważ PHP nie jest silnie wpisane, nie ma pojęcia typu czasu, a więc nie ma sposobu na konwersję między takim ciągiem a wartością "sekund".

Jako taki, w praktyce ludzie często dzielą łańcuch i pomnażają każdą sekcję, jak wspomniano.

4

myślę Najprostszą metodą byłoby użyć strtotime() funkcję:

$time = '21:30:10'; 
$seconds = strtotime("1970-01-01 $time UTC"); 
echo $seconds; 

demo


funkcji date_parse() może być również używany jako data i czas parsowania:

$time = '21:30:10'; 
$parsed = date_parse($time); 
$seconds = $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second']; 

demo

+0

UTC jest tutaj bardzo przydatne, ponieważ czas letni może narobić zamieszania. –

Powiązane problemy