По какой-то причине я конвертирую формат времени, например: 03:30 to seconds 3*3600 + 30*60, now
. Я хочу преобразовать его обратно в свой первый (такой же) формат там. Как это могло быть?
Моя попытка:
3*3600 + 30*60 = 12600 12600 / 60 = 210 / 60 = 3.5, floor(3.5) = 3 = hour
Теперь, как насчет минут?
Учитывая значение может быть как 19:00 or 02:51.
Думаю, у тебя есть картина.
И, кстати, как конвертировать 2:0 for example to 02:00 using RegEx?
$hours = floor($seconds / 3600); $mins = floor($seconds / 60 % 60); $secs = floor($seconds % 60);
Если вы хотите получить формат времени:
$timeFormat = sprintf('%02d:%02d:%02d', $hours, $mins, $secs);
Это может быть проще
gmdate("H:i:s", $seconds)
PHP gmdate
Если вы знаете, что время будет меньше часа, вы можете просто использовать функции date()
или $date->format()
.
$minsandsecs = date('i:s',$numberofsecs);
Это работает, потому что время системы начинается в полночь (1 января 1970 года, но это не важно для вас).
Если это час или больше, но меньше одного дня, вы можете вывести его в часах: mins: secs format with `
$hoursminsandsecs = date('H:i:s',$numberofsecs);
Для более чем одного дня вам понадобится использовать модуль для вычисления количества дней, так как это станет началом даты начала эпохи.
Надеюсь, это поможет.
Возможно, самый простой способ:
gmdate('H:i:s', $your_time_in_seconds);
Пусть $time
– время в виде количества секунд.
$seconds = $time % 60; $time = ($time - $seconds) / 60; $minutes = $time % 60; $hours = ($time - $minutes) / 60;
Теперь часы, минуты и секунды находятся в $hours
, $minutes
и $seconds
соответственно.
Другое решение, которое даст вам дни, часы, минуты и секунды для значения прошедших секунд:
function seconds_to_time($secs) { $dt = new DateTime('@' . $secs, new DateTimeZone('UTC')); return array('days' => $dt->format('z'), 'hours' => $dt->format('G'), 'minutes' => $dt->format('i'), 'seconds' => $dt->format('s')); } print_r(seconds_to_time($seconds_value);
Для «дней» потребуется дополнительная логика, если ожидается, что время будет более одного года. Используйте str_pad () или ltrim () для добавления / удаления начальных нулей.
Ответ ITroubs не касается оставшихся секунд, когда вы хотите использовать этот код для преобразования количества секунд в формат времени, например часы: минуты: секунды
Вот что я сделал, чтобы справиться с этим: (Это также добавляет начало от нуля до одной цифры минут и секунд)
$seconds = 3921; //example $hours = floor($seconds / 3600); $mins = floor(($seconds - $hours*3600) / 60); $s = $seconds - ($hours*3600 + $mins*60); $mins = ($mins<10?"0".$mins:"".$mins); $s = ($s<10?"0".$s:"".$s); $time = ($hours>0?$hours.":":"").$mins.":".$s;
$ time будет содержать «1:05:21» в этом примере.
Если бы вы были жестко запрограммированы, вы использовали бы модуль для извлечения времени, как предложили другие.
Если вы возвращаете секунды из базы данных MySQL, считая, что вам не нужны данные в формате секунд в вашем приложении, есть гораздо более чистый способ сделать это, вы можете использовать MySQL SEC_TO_TIME и вернуть время в hh: mm: ss.
Например.
SELECT SEC_TO_TIME(my_seconds_field) AS my_timestring;
что-то вроде этого?
if(is_numeric($time)){ $value = array( "years" => 0, "days" => 0, "hours" => 0, "minutes" => 0, "seconds" => 0, ); if($time >= 31556926){ $value["years"] = floor($time/31556926); $time = ($time%31556926); } if($time >= 86400){ $value["days"] = floor($time/86400); $time = ($time%86400); } if($time >= 3600){ $value["hours"] = floor($time/3600); $time = ($time%3600); } if($time >= 60){ $value["minutes"] = floor($time/60); $time = ($time%60); } $value["seconds"] = floor($time); return (array) $value;
} else {return (bool) FALSE; }
схвачен с: http://www.ckorp.net/sec2time.php
Извините, что это слишком поздно, но, возможно, полезно
function mediaTimeDeFormater($seconds) { if (!is_numeric($seconds)) throw new Exception("Invalid Parameter Type!"); $ret = ""; $hours = (string )floor($seconds / 3600); $secs = (string )$seconds % 60; $mins = (string )floor(($seconds - ($hours * 3600)) / 60); if (strlen($hours) == 1) $hours = "0" . $hours; if (strlen($secs) == 1) $secs = "0" . $secs; if (strlen($mins) == 1) $mins = "0" . $mins; if ($hours == 0) $ret = "$mins:$secs"; else $ret = "$hours:$mins:$secs"; return $ret; } echo mediaTimeDeFormater(216.064000);//3:36
Используйте modulo:
$hours = $time_in_seconds / 3600; $minutes = ($time_in_seconds / 60) % 60;
только один небольшой дополнительный пример
запрошено время в милисекундах
// ms2time( (microtime(true) - ( time() - rand(0,1000000) ) ) ); // return array function ms2time($ms){ $return = array(); // ms $return['ms'] = (int) number_format( ($ms - (int) $ms), 2, '', ''); $seconds = (int) $ms; unset($ms); if ($seconds%60 > 0){ $return['s'] = $seconds%60; } else { $return['s'] = 0; } if ( ($minutes = intval($seconds/60))){ $return['m'] = $minutes; } if (isset($return['m'])){ $return['h'] = intval($return['m'] / 60); $return['m'] = $return['m'] % 60; } if (isset($return['h'])){ $return['d'] = intval($return['h'] / 24); $return['h'] = $return['h'] % 24; } if (isset($return['d'])) $return['mo'] = intval($return['d'] / 30); foreach($return as $k=>$v){ if ($v == 0) unset($return[$k]); } return $return; } // ms2time2string( (microtime(true) - ( time() - rand(0,1000000) ) ) ); // return array function ms2time2string($ms){ $array = array( 'ms' => 'ms', 's' => 'seconds', 'm' => 'minutes', 'h' => 'hours', 'd' => 'days', 'mo' => 'month', ); if ( ( $return = ms2time($ms) ) && count($ms) > 0){ foreach($return as $key=>$data){ $return[$key] = $data .' '.$array[$key]; } } return implode(" ", array_reverse($return)); }
не// ms2time( (microtime(true) - ( time() - rand(0,1000000) ) ) ); // return array function ms2time($ms){ $return = array(); // ms $return['ms'] = (int) number_format( ($ms - (int) $ms), 2, '', ''); $seconds = (int) $ms; unset($ms); if ($seconds%60 > 0){ $return['s'] = $seconds%60; } else { $return['s'] = 0; } if ( ($minutes = intval($seconds/60))){ $return['m'] = $minutes; } if (isset($return['m'])){ $return['h'] = intval($return['m'] / 60); $return['m'] = $return['m'] % 60; } if (isset($return['h'])){ $return['d'] = intval($return['h'] / 24); $return['h'] = $return['h'] % 24; } if (isset($return['d'])) $return['mo'] = intval($return['d'] / 30); foreach($return as $k=>$v){ if ($v == 0) unset($return[$k]); } return $return; } // ms2time2string( (microtime(true) - ( time() - rand(0,1000000) ) ) ); // return array function ms2time2string($ms){ $array = array( 'ms' => 'ms', 's' => 'seconds', 'm' => 'minutes', 'h' => 'hours', 'd' => 'days', 'mo' => 'month', ); if ( ( $return = ms2time($ms) ) && count($ms) > 0){ foreach($return as $key=>$data){ $return[$key] = $data .' '.$array[$key]; } } return implode(" ", array_reverse($return)); }
с// ms2time( (microtime(true) - ( time() - rand(0,1000000) ) ) ); // return array function ms2time($ms){ $return = array(); // ms $return['ms'] = (int) number_format( ($ms - (int) $ms), 2, '', ''); $seconds = (int) $ms; unset($ms); if ($seconds%60 > 0){ $return['s'] = $seconds%60; } else { $return['s'] = 0; } if ( ($minutes = intval($seconds/60))){ $return['m'] = $minutes; } if (isset($return['m'])){ $return['h'] = intval($return['m'] / 60); $return['m'] = $return['m'] % 60; } if (isset($return['h'])){ $return['d'] = intval($return['h'] / 24); $return['h'] = $return['h'] % 24; } if (isset($return['d'])) $return['mo'] = intval($return['d'] / 30); foreach($return as $k=>$v){ if ($v == 0) unset($return[$k]); } return $return; } // ms2time2string( (microtime(true) - ( time() - rand(0,1000000) ) ) ); // return array function ms2time2string($ms){ $array = array( 'ms' => 'ms', 's' => 'seconds', 'm' => 'minutes', 'h' => 'hours', 'd' => 'days', 'mo' => 'month', ); if ( ( $return = ms2time($ms) ) && count($ms) > 0){ foreach($return as $key=>$data){ $return[$key] = $data .' '.$array[$key]; } } return implode(" ", array_reverse($return)); }
Вот еще один способ с ведущим «0» для всех из них.
$secCount = 10000; $hours = str_pad(floor($secCount / (60*60)), 2, '0', STR_PAD_LEFT); $minutes = str_pad(floor(($secCount - $hours*60*60)/60), 2, '0', STR_PAD_LEFT); $seconds = str_pad(floor($secCount - ($hours*60*60 + $minutes*60)), 2, '0', STR_PAD_LEFT);
Это адаптация от ответа Flaxious.
Если вам нужен хороший формат, например: 0:00:00, используйте str_pad () как @Gardner.
1 день = 86400000 миллисекунд.
DecodeTime (миллисекунды / 86400000, ч, мин, сек, мс)
UPS! Я думал в дельфи, должно быть что-то похожее на всех языках.