В настоящее время в Python нет разделителя тысяч, но вы можете использовать модуль locale
для преобразования строки с такими разделителями в int:
import locale
locale.setlocale(locale.LC_ALL, '')
locale.atoi("1,000,000")
Не нужно 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;
И если вы не хотите использовать регулярные выражения:
$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;
В псевдокоде:
split it by colon
seconds = 3600 * HH + 60 * MM + SS
// HH:MM:SS or MM:SS
echo substr($time , "-2"); // returns last 2 chars : SS
Попробуйте следующее:
$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;
Вы можете использовать функцию strtotime
, чтобы вернуть количество секунд из today 00:00:00
.
$seconds= strtotime($time) - strtotime('00:00:00');
Простой
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;
}
<?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];
$time = 00:06:00;
$timeInSeconds = strtotime($time) - strtotime('TODAY');
Я думаю, что самым простым методом было бы использовать функцию 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;
Функция date_parse()
также может использоваться для синтаксического анализа даты и времени:
$time = '21:30:10';
$parsed = date_parse($time);
$seconds = $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second'];
Если вы проанализируете формат MM:SS
с strtotime()
или date_parse()
он не сработает (date_parse()
используется в strtotime()
и DateTime
), потому что когда вы вводите формат, подобный xx:yy
, парсер предполагает, что он HH:MM
, а не MM:SS
, Я предлагаю проверить формат и добавить 00:
, если у вас есть только MM:SS
.
demo strtotime()
demo date_parse()
Если у вас есть часы более 24, вы можете использовать следующую функцию (она будет работать в формате MM:SS
и HH:MM:SS
):
function TimeToSec($time) {
$sec = 0;
foreach (array_reverse(explode(':', $time)) as $k => $v) $sec += pow(60, $k) * $v;
return $sec;
}
strtotime()
не позволяет часам выходить за пределы 24 - использование 25 или выше вернет «false».
– Sven
18 July 2015 в 18:33
array_reverse
и взорвется на :
, затем вызывая еще одно прохождение через foreach
и другое pow
(так что оба hh: mm i> AND hh: mm: ss i> работа без модификации функции) - это гениальный штрих. Code par excellence. Я вряд ли могу представить более эффективный пример. Благодаря!
– FirstFraktal
24 August 2015 в 04:26
$time="12:10:05"; //your time
echo strtotime("0000-00-00 $time")-strtotime("0000-00-00 00:00:00");