2011-05-18 17 views
10

Quello che il modo migliore per convertire il tempo di 24 ore a secondi in modo che possa essere utilizzato per il confronto if ..Converti in secondi

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

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

Se si tenta di convertire il tempo a mezzanotte (00:00) di secondi , non funzionerà. Qual è la soluzione a questo?

00:00, 00:30, 01:00, 01:30, ecc

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

Questo non funziona.

+3

quando si dice che la conversione '00: 00 'non funzionerà, cosa intendi? Risulterà in zero secondi, ma è corretto vero? Se vuoi che 00:00 significhi 24 ore anziché zero ore, dovrai renderlo un caso speciale. – Spudley

+0

È vero, quando dici caso speciale ... come cosa? Ho un codice simile a questo: if (HourMinuteToDecimal ("01:30")> HourMinuteToDecimal ("23:30")) {..} Che funziona come previsto .. Come risolvere questo problema? – user622378

+2

@ user622378: per risolvere il "problema", devi indicare qual è il problema. Hai detto "questo non funzionerà" e "che non funzionerebbe come previsto", ma non continuare a dire _why_. Non vedo un problema qui. –

risposta

6

Per convertire la funzione:

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']; 

} 

scrittura al volo, non testati :-P

modo, è possibile utilizzare strtotime per convertire il formato della data in unix timestamp e comparte con un'operatori standar (== <>> = = = <, ecc) 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. 

ecc ..

+0

$ t1 = hoursToSecods ("00:00:00"); non funzionerebbe 00:00:00 è possibile mezzanotte 12:00 – user622378

+1

sì, ma se leggete la domanda; "Qual è il modo migliore per convertire 24 ore in secondi in modo che possa essere usato per il confronto se l'affermazione ..", 00:00:00 è uno 0 di giorno passato. – Exos

0

È possibile confrontare oggetti di tipo time utilizzando gli operatori standard <, >, ==. Utilizzare strtotime per convertire la stringa in tempo, quindi confrontare.

+0

Non sai cosa intendi per oggetto di tipo time. I tempi sono memorizzati nel database usando il tipo di campo "orario". 17:00:00, 178: 00: 00, 00:00:00, 01:00:00, ecc. – user622378

+0

Quando caricate i valori temporali dal database, saranno stringhe. Usa 'strtotime' per convertire quelle stringhe in tempi. –

+0

Non penso che dovremmo inserire il timestamp UNIX in esso. Non abbiamo a che fare con le date. –

4

Sembra che tu stia chiedendo cose contraddittorie.

  • Si desidera convertire un'ora in HH:MM in secondi.
  • Ma poi si desidera "confrontare" il risultato da tempi diversi, come se avessero delle date allegate.

Se si desidera consentire HourMinuteToDecimal("01:30") > HourMinuteToDecimal("23:30") per essere vero, senza una data, poi, beh, qualsiasi confronto tornerà true.

Se si desidera eseguire questa operazione correttamente, includere la data (YYYY-MM-DD HH:MM:SS) e utilizzare strtotime in PHP per ottenere il numero di secondi dall'epoca UNIX.


Inoltre, la funzione restituisce minuti, non secondi.

+0

Come posso includere YYYY-MM-DD? Ho già ottenuto oltre 8000 righe di tempo senza data. Quindi 23:30 sarebbe 2011-05-18 23:30:30 e 00:00 è il 2011-05-19 00:00:00? – user622378

+0

@ user622378: Come si suppone che il tuo codice indovini da che giorno arriva l'ora? O intendi usare "ora" come punto di svolta? –

+0

Esempio: $ nowTime = HourMinuteToDecimal (date ('H: i')); $ OpenTime = HourMinuteToDecimal ($ data ['Result'] [$ key] ['opentime']); if ($ nowTime> $ OpenTime) {..} Funziona ma non quando il tempo oltre 00:00 – user622378

10

PHP5.3

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

Qual è il punto del 1970 in questo? –

+0

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