2011-01-29 6 views

Répondre

91

Pas besoin de quoi que ce soit explode:

$str_time = "23:12:95"; 

$str_time = preg_replace("/^([\d]{1,2})\:([\d]{2})$/", "00:$1:$2", $str_time); 

sscanf($str_time, "%d:%d:%d", $hours, $minutes, $seconds); 

$time_seconds = $hours * 3600 + $minutes * 60 + $seconds; 

Et si vous ne voulez pas utiliser des expressions régulières:

$str_time = "2:50"; 

sscanf($str_time, "%d:%d:%d", $hours, $minutes, $seconds); 

$time_seconds = isset($seconds) ? $hours * 3600 + $minutes * 60 + $seconds : $hours * 60 + $minutes; 
+0

Solution sucrée. Mais cette rupture ne serait-elle pas si HH n'est pas présent? – simme

+0

Je l'ai juste réparé, donc ce ne serait pas le cas. –

+0

Quelle belle solution! – Ryan

4

En pseudocode:

split it by colon 
seconds = 3600 * HH + 60 * MM + SS 
+0

Est-ce PHP? 8O – Ryan

+6

Comme il l'a écrit, c'est un pseudo-code. "Pretend code" pour expliquer comment quelque chose pourrait être fait. – simme

0
<?php 
$time = '21:32:32'; 
$seconds = 0; 
$parts = explode(':', $time); 

if (count($parts) > 2) { 
    $seconds += $parts[0] * 3600; 
} 
$seconds += $parts[1] * 60; 
$seconds += $parts[2]; 
+0

Et si c'était seulement 32:32 sans l'heure? – Ryan

+1

Ensuite, cela ne fonctionnerait pas. Vous devez évidemment valider le format en premier. Et enlevez le premier $ secondes + = partie – simme

+1

Que diriez-vous de tableau flip $ parts? Je suis génieux !!! – Ryan

-3
// HH:MM:SS or MM:SS 
echo substr($time , "-2"); // returns last 2 chars : SS 
5

Essayez ceci:

$time = "21:30:10"; 
$timeArr = array_reverse(explode(":", $time)); 
$seconds = 0; 
foreach ($timeArr as $key => $value) 
{ 
    if ($key > 2) break; 
    $seconds += pow(60, $key) * $value; 
} 
echo $seconds; 
+0

J'adore! $ time = "01: 23: 54: 21: 30: 10" me donne une réponse de 1087421410 secondes. –

+2

Essayez-le maintenant. Bien sûr, vous pouvez passer quelque chose comme "898989: 8989898: 899899", mais je suppose que les validations de base seront faites sur le temps entré avant que le code atteint le calcul des secondes. – Chandu

-1
$time="12:10:05"; //your time 
echo strtotime("0000-00-00 $time")-strtotime("0000-00-00 00:00:00"); 
82

Je pense que la méthode la plus simple serait d'utiliser la fonction strtotime():

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

// same with objects (for php5.3+) 
$time = '21:30:10'; 
$dt = new DateTime("1970-01-01 $time", new DateTimeZone('UTC')); 
$seconds = (int)$dt->getTimestamp(); 
echo $seconds; 

demo


Fonction date_parse() peut également être utilisé pour la date de l'analyse syntaxique et l'heure:

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

demo


Si vous analyser le format MM:SS avec strtotime() ou date_parse() il échouera (date_parse() est utilisé dans strtotime() et DateTime), parce que lorsque vous entrez un format comme xx:yy parser suppose qu'il est HH:MM et non MM:SS. Je suggère de vérifier le format, et préfixez 00: si vous avez seulement MM:SS.

demostrtotime()demodate_parse()


Si vous avez des heures plus de 24 ans, vous pouvez utiliser la fonction suivante (cela fonctionnera pour MM:SS et le format HH:MM:SS):

function TimeToSec($time) { 
    $sec = 0; 
    foreach (array_reverse(explode(':', $time)) as $k => $v) $sec += pow(60, $k) * $v; 
    return $sec; 
} 

demo

+2

Merci! En passant: de beaux liens de mise en forme! –

+1

'strtotime()' n'autorise pas les heures à aller au-delà de 24 - l'utilisation de 25 ou plus retournera "false". – Sven

+0

@Sven: J'ai mis à jour la réponse. –

1

Simple

function timeToSeconds($time) 
{ 
    $timeExploded = explode(':', $time); 
    if (isset($timeExploded[2])) { 
     return $timeExploded[0] * 3600 + $timeExploded[1] * 60 + $timeExploded[2]; 
    } 
    return $timeExploded[0] * 3600 + $timeExploded[1] * 60; 
} 
1
$time = 00:06:00; 
    $timeInSeconds = strtotime($time) - strtotime('TODAY'); 
0

Vous pouvez utiliser la fonction strtotime pour retourner le nombre de secondes de today 00:00:00.

$seconds= strtotime($time) - strtotime('00:00:00'); 
+1

Bien que cet extrait de code puisse résoudre la question, [y compris une explication] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) aide vraiment à améliorer la qualité de votre message.Rappelez-vous que vous répondez à la question pour les lecteurs dans le futur, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code. Essayez également de ne pas surcharger votre code avec des commentaires explicatifs, ceci réduit la lisibilité du code et des explications! –

Questions connexes