Wie kann man die Zeit im Format HH:MM:SS
in eine flache Sekundenzahl umwandeln ?
PS Time kann manchmal nur im Format sein MM:SS
.
Keine Notwendigkeit für explode
irgendetwas:
$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;
Und wenn Sie keine regulären Ausdrücke verwenden möchten:
$str_time = "2:50";
sscanf($str_time, "%d:%d:%d", $hours, $minutes, $seconds);
$time_seconds = isset($hours) ? $hours * 3600 + $minutes * 60 + $seconds : $minutes * 60 + $seconds;
$time_seconds = isset($seconds) ? $hours * 3600 + $minutes * 60 + $seconds : $hours * 60 + $minutes;
Sollte sein$time_seconds = isset($hours) ? $hours * 3600 + $minutes * 60 + $seconds : $minutes * 60 + $seconds;
Ich denke, die einfachste Methode wäre, die
strtotime()
Funktion zu verwenden :$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
Die Funktion
date_parse()
kann auch zum Parsen von Datum und Uhrzeit verwendet werden:$time = '21:30:10'; $parsed = date_parse($time); $seconds = $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second'];
demo
Wenn Sie das Format
MM:SS
mit analysierenstrtotime()
oderdate_parse()
es fehlschlägt (date_parse()
wird instrtotime()
und verwendetDateTime
), denn wenn Sie ein Format wie denxx:yy
Parser eingeben, wird davon ausgegangen, dass dies der Fall istHH:MM
und nichtMM:SS
. Ich würde vorschlagen, das Format zu überprüfen und voranzustellen,00:
wenn Sie nur habenMM:SS
.demo
strtotime()
demodate_parse()
Wenn Sie mehr als 24 Stunden haben, können Sie die nächste Funktion verwenden (sie funktioniert
MM:SS
undHH:MM:SS
formatiert):function TimeToSec($time) { $sec = 0; foreach (array_reverse(explode(':', $time)) as $k => $v) $sec += pow(60, $k) * $v; return $sec; }
demo
quelle
strtotime()
erlaubt nicht, dass die Stunden über 24 hinausgehen - wenn Sie 25 oder höher verwenden, wird "false" zurückgegeben.array_reverse
und explodieren:
dann eine weitere Reise durch den verursachtforeach
und eine anderepow
(so dass beide hh: mm UND hh: mm: ss Arbeit ohne Änderung der Funktion) ist ein Geniestreich. Code par excellence. Ich kann mir kaum ein effizienteres Beispiel vorstellen. Vielen Dank!$time = 00:06:00; $timeInSeconds = strtotime($time) - strtotime('TODAY');
quelle
Im Pseudocode:
split it by colon seconds = 3600 * HH + 60 * MM + SS
quelle
Versuche dies:
$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;
quelle
Mit dieser
strtotime
Funktion können Sie die Anzahl der Sekunden von zurückgebentoday 00:00:00
.$seconds= strtotime($time) - strtotime('00:00:00');
quelle
Einfach
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; }
quelle
<?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];
quelle
function time2sec($time) { $durations = array_reverse(explode(':', $item->duration)); $second = array_shift($durations); foreach ($durations as $duration) { $second += (60 * $duration); } return $second; } echo time2sec('4:52'); // 292 echo time2sec('2:01:42'); // 7302
quelle