Лучше убедиться, что количество секунд меньше 86,400.
приветствие
12
H представляет количество часов за один день. Таким образом, если у вас есть 90000 секунд, и вы будете использовать H на нем, результатом будет 01 (первый час следующего дня). НЕ 25 - есть только 24 часа в день.
MarcinWolny
7
Я не уверен, что это правильный ответ, это даст datetime... так что если мы ожидаем результат> 24 часов, он не сработает. Также, если нам нужен какой-то отрицательный результат (например, работа со смещением), он не будет работать. -1за жаворонок деталей
WonderLand
54
Это не должно быть принятым ответом из-за очевидного недостатка для времен, которые больше, чем 24 часа.
Скотт Флэк
10
Для использования со днями, когда числа могут превышать 85399, вы можете использовать echo gmdate("z H:i:s", 685);z - количество дней в году, начиная с 0. Вы, очевидно, можете просмотреть руководство по датам php, чтобы удовлетворить ваши конкретные потребности.
Ночной волк
177
Один час 3600 секунд, одна минута 60 секунд, так почему бы и нет:
Хороший ответ, но убедитесь, что вы вычитаете $ hours * 3600 и $ minutes * 60 из $ init между каждой операцией, в противном случае вы получите двойной счет минут и секунд.
Майк Стоу
5
Чтобы добавить комментарий @ Amber, используйте sprintfдля возврата значение вместо его печати.
Аллен Батлер
77
Ну вот
function format_time($t,$f=':')// t = seconds, f = separator {return sprintf("%02d%s%02d%s%02d", floor($t/3600), $f,($t/60)%60, $f, $t%60);}
echo format_time(685);// 00:11:25
Не работает для отрицательных значений. Если у вас есть отрицательный интервал секунд, используйте это:return ($t< 0 ? '-' : '') . sprintf("%02d%s%02d%s%02d", floor(abs($t)/3600), $f, (abs($t)/60)%60, $f, abs($t)%60); }
Ajax
66
Используйте функцию, gmdate()только если секунды меньше 86400(1 дня) :
Другие решения используют gmdate, но терпят неудачу в крайних случаях, когда у вас есть более 86400 секунд. Чтобы обойти это, мы можем сами посчитать количество часов, а затем дать возможность gmdateвычислить оставшиеся секунды в минуты / секунды.
$ HMS = gmdate ( "Н: я: s", 12720); этого недостаточно, чтобы получить Day-Hour-Min-Sec
Mughal
7
gmdate("H:i:s", no_of_seconds);
Не будет указывать время в H:i:sформате, если no_of_secondsоно больше 1 дня (секунд в дне).
Он будет пренебрегать дневным значением и даст толькоHour:Min:Seconds
Например:
gmdate("H:i:s",89922);// returns 0:58:42 not (1 Day 0:58:42) or 24:58:42
@ barfoon - правда, но я верю, что именно об этом просил М.Эзз, и это стандарт, используемый во времени. Это выглядит странно из моего опыта «3: 7: 5» вместо «03:07:05», или даже «3: 7», для меня больше похоже на соотношение.
Керри Джонс
3
Функция gmtdate () не работала для меня, так как я отслеживал часы, отработанные над проектом, и если это больше 24 часов, вы получаете сумму, оставшуюся после 24 часов вычитания. Другими словами, 37 часов становятся 13 часами. (все как указано выше в Glavic - спасибо за ваши примеры!) Этот работал хорошо:
Этот код максимально избегает утомительных вызовов функций и пошагового построения строк, а также больших и громоздких функций, которые люди делают для этого.
Он создает формат «1h05m00s» и использует начальные нули в течение минут и секунд, если им предшествует другой ненулевой компонент времени.
И он пропускает все пустые ведущие компоненты, чтобы избежать предоставления вам бесполезной информации, такой как «0h00m01s» (вместо этого она будет отображаться как «1s»).
Пример результатов: «1с», «1м00с», «19м08с», «1ч00м00с», «4ч08м39с».
Если вы хотите сделать код еще короче (но менее читабельным), вы можете избежать $convertedмассива и вместо этого поместить значения непосредственно в вызов sprintf (), как показано ниже:
Длительность должна быть 0 или выше в обоих фрагментах кода выше. Отрицательные длительности не поддерживаются. Но вы можете обрабатывать отрицательные длительности, используя вместо этого следующий альтернативный код:
Обратите внимание, что gmdate()хак даже короче этого, но поддерживает только продолжительность до 24 часов. Все, что больше 24 часов, потерпит неудачу, если вы используете трюк с gmdate!
$given =685;/*
* In case $given == 86400, gmdate( "H" ) will convert it into '00' i.e. midnight.
* We would need to take this into consideration, and so we will first
* check the ratio of the seconds i.e. $given:$number_of_sec_in_a_day
* and then after multiplying it by the number of hours in a day (24), we
* will just use "floor" to get the number of hours as the rest would
* be the minutes and seconds anyways.
*
* We can also have minutes and seconds combined in one variable,
* e.g. $min_sec = gmdate( "i:s", $given );
* But for versatility sake, I have taken them separately.
*/
$hours =( $given >86399)?'0'.floor(( $given /86400)*24)-gmdate("H", $given ): gmdate("H", $given );
$min = gmdate("i", $given );
$sec = gmdate("s", $given );
echo $formatted_string = $hours.':'.$min.':'.$sec;
Если вам нужно сделать это в javascript, вы можете сделать это всего за одну строку кода, как здесь дан ответ. Конвертируйте секунды в HH-MM-SS с помощью JavaScript . Замените СЕКУНДЫ тем, что вы хотите конвертировать.
var time =newDate(SECONDS *1000).toISOString().substr(11,8);
На всякий случай, если кто-то еще ищет простую функцию для возврата этого красиво отформатированного (я знаю, что это не тот формат, который запрашивал OP), это то, что я только что придумал. Спасибо @mughal за код, на котором он основан.
seconds
вdate/time
или в количество часов: минута: секунды?Ответы:
Вы можете использовать
gmdate()
функцию:источник
datetime
... так что если мы ожидаем результат> 24 часов, он не сработает. Также, если нам нужен какой-то отрицательный результат (например, работа со смещением), он не будет работать.-1
за жаворонок деталейecho gmdate("z H:i:s", 685);
z - количество дней в году, начиная с 0. Вы, очевидно, можете просмотреть руководство по датам php, чтобы удовлетворить ваши конкретные потребности.Один час 3600 секунд, одна минута 60 секунд, так почему бы и нет:
который производит:
(Я не проверял так много, так что могут быть ошибки с полом или около того)
источник
printf("%02d:%02d:%02d", $hours, $minutes, $seconds);
sprintf
для возврата значение вместо его печати.Ну вот
источник
return ($t< 0 ? '-' : '') . sprintf("%02d%s%02d%s%02d", floor(abs($t)/3600), $f, (abs($t)/60)%60, $f, abs($t)%60); }
Используйте функцию,
gmdate()
только если секунды меньше86400
(1 дня) :Смотрите: gmdate ()
Запустить демо
Преобразовать секунды для форматирования в футах без ограничений * :
Смотрите: floor () , sprintf () , арифметические операторы
Запустить демо
Пример использования
DateTime
расширения:Смотрите: DateTime :: __ construct () , DateTime :: modify () , clone , sprintf ()
Запустить демо
MySQL , например , диапазон результата ограничивается к тому , что типа данных TIME, который составляет от
-838:59:59
до838:59:59
:Смотрите: SEC_TO_TIME
Запустить демо
Пример PostgreSQL:
Запустить демо
источник
Другие решения используют
gmdate
, но терпят неудачу в крайних случаях, когда у вас есть более 86400 секунд. Чтобы обойти это, мы можем сами посчитать количество часов, а затем дать возможностьgmdate
вычислить оставшиеся секунды в минуты / секунды.Вход:
6030
Выход:1:40:30
Вход:
2000006030
Выход:555557:13:50
источник
источник
Не будет указывать время в
H:i:s
формате, еслиno_of_seconds
оно больше 1 дня (секунд в дне).Он будет пренебрегать дневным значением и даст только
Hour:Min:Seconds
Например:
источник
Вот один вкладыш, который обрабатывает отрицательные секунды и секунд больше, чем за 1 день.
Например:
выходы: -26: 03: 04
источник
Если вам не нравится принятый ответ или популярные, попробуйте этот
источник
напишите такую функцию, чтобы вернуть массив
затем просто вызовите функцию следующим образом:
вывод
источник
Видеть:
От: Конвертировать секунды в дни, часы, минуты и секунды
источник
Попробуй это:
Взято с
http://bytes.com/topic/php/answers/3917-seconds-converted-hh-mm-ss
источник
Функция gmtdate () не работала для меня, так как я отслеживал часы, отработанные над проектом, и если это больше 24 часов, вы получаете сумму, оставшуюся после 24 часов вычитания. Другими словами, 37 часов становятся 13 часами. (все как указано выше в Glavic - спасибо за ваши примеры!) Этот работал хорошо:
источник
Эта функция может быть полезна, вы можете расширить ее:
источник
Решение от: https://gist.github.com/SteveJobzniak/c91a8e2426bac5cb9b0cbc1bdbc45e4b
Вот очень чистый и короткий метод!
Этот код максимально избегает утомительных вызовов функций и пошагового построения строк, а также больших и громоздких функций, которые люди делают для этого.
Он создает формат «1h05m00s» и использует начальные нули в течение минут и секунд, если им предшествует другой ненулевой компонент времени.
И он пропускает все пустые ведущие компоненты, чтобы избежать предоставления вам бесполезной информации, такой как «0h00m01s» (вместо этого она будет отображаться как «1s»).
Пример результатов: «1с», «1м00с», «19м08с», «1ч00м00с», «4ч08м39с».
Если вы хотите сделать код еще короче (но менее читабельным), вы можете избежать
$converted
массива и вместо этого поместить значения непосредственно в вызов sprintf (), как показано ниже:Длительность должна быть 0 или выше в обоих фрагментах кода выше. Отрицательные длительности не поддерживаются. Но вы можете обрабатывать отрицательные длительности, используя вместо этого следующий альтернативный код:
источник
gmdate()
хак даже короче этого, но поддерживает только продолжительность до 24 часов. Все, что больше 24 часов, потерпит неудачу, если вы используете трюк с gmdate!Простой способ использовать DateTime для этого:
Это простое решение, которое дает вам возможность использовать формат метода DateTime.
источник
В Java вы можете использовать этот способ.
источник
источник
Ну, мне нужно что-то, что уменьшило бы секунды на часы, минуты и секунды, но превысило бы 24 часа, а не снизило бы количество дней.
Вот простая функция, которая работает. Вы, вероятно, можете улучшить это ... Но вот оно:
источник
Чтобы преобразовать его в функцию:
источник
Если вам нужно сделать это в javascript, вы можете сделать это всего за одну строку кода, как здесь дан ответ. Конвертируйте секунды в HH-MM-SS с помощью JavaScript . Замените СЕКУНДЫ тем, что вы хотите конвертировать.
источник
Если вы хотите создать строку продолжительности аудио / видео, такую как YouTube и т. Д., Вы можете сделать:
($seconds >= 60) ? ltrim(gmdate("H:i:s", $seconds), ":0") : gmdate("0:s", $seconds)
Вернет строки как:
Вероятно, не будет хорошо работать на время> = 24 часа.
источник
Это красивый способ сделать это:
источник
На всякий случай, если кто-то еще ищет простую функцию для возврата этого красиво отформатированного (я знаю, что это не тот формат, который запрашивал OP), это то, что я только что придумал. Спасибо @mughal за код, на котором он основан.
источник
Любой, кто ищет это в будущем, дает формат, который запрашивал первоначальный плакат.
источник
источник