2012-12-27 21 views
6

Eventuali duplicati:
Convert seconds to Hour:Minute:Seconddata di PHP() ore, minuti e secondi senza zeri

Ho cercato tutti su internet per trovare un buon modo di convertire secondi in minuti: secondi senza zeri iniziali. Ho già controllato this question, che è l'unico che sono stato in grado di trovare, ma nessuna di queste risposte sembra molto buona. Forse sono l'unico e il modo migliore per raggiungere questo obiettivo, ma spero di no.

Ho fatto questo e mi dà il numero di minuti senza zeri iniziali, tuttavia non riesco a ottenere i secondi. L'unico modo in cui posso pensare di farlo in questo modo sarebbe di fare qualche riga di matematica e così via, ma sembra un sacco di lavoro per qualcosa di così semplice ... che non so perché PHP non 't hanno è integrato per minuti e secondi in ogni modo ....

intval(gmdate("i:s", $duration)); 

Modifica Tutto quello che sto cercando di fare è quello di convertire il numero di secondi in un video, in un H: M: S formato.

+0

Per cosa è necessario 'intval()'? ** Perché ** l'hai aggiunto? – zerkms

+0

Bene, è una delle risposte sull'altra domanda di overflow nella mia domanda, rimuove gli zeri e tutto il resto. –

+0

no non lo è. Si prega di leggere la documentazione prima di applicare le funzioni in modo casuale: http://php.net/intval – zerkms

risposta

2
implode(
    ':', 
    array_map(
     function($i) { return intval($i, 10); }, 
     explode(':', gmdate('H:i:s', $duration)) 
    ) 
) 

però che dire se ora == 0 allora non stampare 0: e solo m: s

preg_replace(
    '~^0:~', 
    '', 
    implode(
     ':', 
     array_map(
      function($i) { return intval($i, 10); }, 
      explode(':', gmdate('H:i:s', $duration)) 
     ) 
    ) 
) 
+0

buon lavoro per avere tutto in 1 linea :). –

+0

Grazie, questo ha il risultato previsto. Non ho chiesto questo, ma che dire se ora == 0 quindi non stampare 0: e basta avere m: s –

+0

@Dylan Cross: vedere la versione 2 – zerkms

1

gmdate richiede un timestamp come secondo parametro. Si dovrebbe fare qualcosa di simile:

echo gmdate("H:i:s", mktime(0, 0, 0, 1, 1, 1998) + $duration); 

intval non dovrebbe essere lì, come si stanno ottenendo una stringa e state trasformando ad un int di nuovo. Con H: i: s hai le 10:40:05.
Ciò tuttavia non funzionerà se si ha la durata> quindi 24 ore.

+0

Tuttavia, voglio rimuovere gli zeri iniziali, il codice sopra non lo fa. –

+0

Se vuoi senza lo 0 iniziale allora dovrai usare $ hours = date ("h", mktime (0, 0, 0, 1, 1, 1998) + $ duration); $ minutes = intval (date ("i", mktime (0, 0, 0, 1, 1, 1998) + $ duration)); $ seconds = intval (date ("s", mktime (0, 0, 0, 1, 1, 1998) + $ duration)); –

+0

Ho modificato il mio codice, ho la sensazione che dovresti usare la data invece di gmdate. Altrimenti ora potrebbe non essere accurato in base alla data del server. –

2

vorrei solo scrivere in modo iterativo:

function duration_to_timestring($duration) 
{ 
     $s = []; 
     if ($duration > 3600) { 
       $s[] = floor($duration/3600); 
       $duration %= 3600; 
     } 
     $s[] = floor($duration/60); 
     $s[] = floor($duration % 60); 

     return join(':', $s); 
} 
+0

Anche questo sarebbe buono, anche se non riesco ancora a capire perché php non lo fa t include minuti e secondi senza zeri iniziali. –

+1

@DylanCross Solo i privilegiati sanno perché, forse hanno finito le lettere utili da utilizzare come specificatori di formato ;-) –

Problemi correlati