2011-05-18 12 views
10

Co jest najlepszym sposobem na konwersję 24 godzin czasu na sekundy, dzięki czemu można go stosować dla porównania if ..Konwersja do sekundy

function HourMinuteToDecimal($hour_minute) { 
     $t = explode(':', $hour_minute); 
     return $t[0] * 60 + $t[1]; 
} 

echo HourMinuteToDecimal("23:30"); 
return 1410 

Jeśli próbujesz konwertować czas północy (00:00) do sekundy , to nie zadziała. Jakie jest rozwiązanie tego?

00:00, 00:30, 01:00, 01:30 itd

if (HourMinuteToDecimal("01:30") > HourMinuteToDecimal("23:30")) { .. } 

To nie zadziała.

+3

kiedy mówisz, że konwersja "00: 00" nie zadziała, co masz na myśli? Spowoduje to zero sekund, ale czy to prawda? Jeśli chcesz, aby 00:00 oznaczało 24 godziny zamiast godziny zero, musisz to uczynić specjalnym przypadkiem. – Spudley

+0

To prawda, kiedy mówisz o specjalnym przypadku ... jak co? Mam kod podobny do tego: if (HourMinuteToDecimal ("01:30")> HourMinuteToDecimal ("23:30")) {..} To działa poprawnie, jak tego oczekiwano .. Jak rozwiązać ten problem? – user622378

+2

@ user622378: Aby rozwiązać "problem", musisz podać, na czym polega problem. Powiedziałeś "to nie zadziała" i "to nie zadziałałoby zgodnie z oczekiwaniami", ale nie mów "dlaczego". Nie widzę tutaj problemu. –

Odpowiedz

6

Aby przekonwertować funkcja:

function hoursToSecods ($hour) { // $hour must be a string type: "HH:mm:ss" 

    $parse = array(); 
    if (!preg_match ('#^(?<hours>[\d]{2}):(?<mins>[\d]{2}):(?<secs>[\d]{2})$#',$hour,$parse)) { 
     // Throw error, exception, etc 
     throw new RuntimeException ("Hour Format not valid"); 
    } 

     return (int) $parse['hours'] * 3600 + (int) $parse['mins'] * 60 + (int) $parse['secs']; 

} 

pisać na bieżąco, nie testowane :-P

tak, można użyć strtotime konwertować format daty w uniksowy znacznik czasu i comparte przy użyciu operatorów Standar (== <>> = = = <, etc) ex:

$t1 = "23:40:12"; 
$t2 = "17:53:04"; 

$h1 = strtotime("0000-00-00 $t1"); 
$h2 = strtotime("0000-00-00 $t2"); 

$h1 == $h2; // if are equals 
$h1 > $h2; // if h1 is mayor at h2 
$h1-$h2; // dieference in seconds, etc. 

etc ..

+0

$ t1 = hoursToSecods ("00:00:00"); nie działa. 00:00:00 jest północy o północy – user622378

+1

tak, ale jeśli czytasz pytanie; "Jaki jest najlepszy sposób na konwersję czasu 24-godzinnego na sekundy, aby można go było użyć do porównania, jeśli instrukcja ..", 00:00:00 to 0 sekundowa sekunda dnia. – Exos

0

Można porównać obiekty typu time przy użyciu standardowych operatorów <, >, ==. Użyj strtotime, aby przekształcić ciąg w czas, a następnie porównaj.

+0

Nie wiesz, co masz na myśli przez obiekty typu czas. Czasy są przechowywane w bazie danych przy użyciu typu pola "czas". 17:00:00, 178: 00: 00, 00:00:00, 01:00:00, itp. – user622378

+0

Podczas ładowania wartości czasu z bazy danych będą to ciągi. Użyj 'strtotime', aby przekonwertować te łańcuchy do czasów. –

+0

Myślę, że nie powinniśmy wprowadzać do niego znaczników czasu UNIX. Nie mamy do czynienia z datami. –

4

Wygląda na to, że pytasz o sprzeczne rzeczy.

  • Chcesz zamienić czas w HH:MM na sekundy.
  • Ale potem chcesz "porównać" wynik z różnych czasów, tak jakby miały dołączone daty.

Jeśli chcesz zezwolić HourMinuteToDecimal("01:30") > HourMinuteToDecimal("23:30") aby mogło być prawdziwe, bez daty, a następnie dobrze, jakiekolwiek porównanie powróci true.

Jeśli chcesz to zrobić poprawnie, dołącz datę (YYYY-MM-DD HH:MM:SS) i użyj strtotime w PHP, aby uzyskać liczbę sekund od epoki UNIX.


Twoja funkcja zwraca również minuty, a nie sekundy.

+0

Jak mogę uwzględnić RRRR-MM-DD? Mam już ponad 8000 wierszy czasu bez daty. Tak więc 23:30 będzie 2011-05-18 23:30:30 i 00:00 jest 2011-05-19 00:00:00? – user622378

+0

@ user622378: W jaki sposób twój kod powinien odgadnąć, w którym dniu jest godzina? Czy też zamierzasz użyć "teraz" jako punktu obrotu? –

+0

Przykład: $ nowTime = HourMinuteToDecimal (date ('H: i')); $ OpenTime = HourMinuteToDecimal ($ data ['Wynik'] [$ key] ['opentime']); if ($ nowTime> $ OpenTime) {..} Działa, ale nie, gdy czas powyżej 00:00 – user622378

10

PHP5.3

$formattedTime = '00:01:38'; 
$seconds = strtotime('1970-01-01 ' . $formattedTime . 'GMT') 
+0

Jaki jest sens 1970 roku? –

+0

@MuhammadbinYusrat https://en.wikipedia.org/wiki/Unix_time –