Это общая проблема, но я не уверен, как ее решить. Код ниже работает отлично.
var mind = time % (60 * 60);
var minutes = Math.floor(mind / 60);
var secd = mind % 60;
var seconds = Math.ceil(secd);
Однако, когда я получаю 1 час или 3600 секунд, он возвращает 0 минут и 0 секунд. Как я могу избежать этого, чтобы он возвращал все минуты?
Спасибо
javascript
Джеймс Мур
источник
источник
Ответы:
Чтобы получить количество полных минут, разделите общее количество секунд на 60 (60 секунд / минута):
И чтобы получить оставшиеся секунды, умножьте полные минуты на 60 и вычтите из общего количества секунд:
Теперь, если вы также хотите получить полные часы, разделите общее количество секунд на 3600 (60 минут / час · 60 секунд / минут), а затем рассчитайте оставшиеся секунды:
Затем вы рассчитываете полные минуты и оставшиеся секунды.
Бонус:
Используйте следующий код, чтобы красиво распечатать время (предложено Dru)
источник
function str_pad_left(string,pad,length){ return (new Array(length+1).join(pad)+string).slice(-length); } var finalTime = str_pad_left(minutes,'0',2)+':'+str_pad_left(seconds,'0',2);
time
. Если вы, например, введете -1 секунду, вы получите -1 минуту и 59 секунд назад ...time
? Логически разница во времени всегда положительнаvar seconds = time % 60
Еще одно необычное решение:
~~
это сокращение дляMath.floor
, см. эту ссылку для получения дополнительной информацииПопробуй онлайн
источник
~~
?Math.floor
, см. Эту ссылку .time = math.round(time)
в первую строку, чтобы дать мне округленные секунды.Для людей, которые надеются на быстрое простое и, следовательно, короткое решение для форматирования секунд в
M:SS
:сделано ..
Эта функция принимает либо
Number
(предпочтительнее) или аString
(2 «конверсионные штрафы» , которые вы можете сократить вдвое, предваряя+
в аргументе вызова функции дляs
как в:fmtMSS(+strSeconds)
), представляющем целые положительные секунды вs
качестве аргумента.Примеры:
Сломать:
Примечание. Отрицательный диапазон можно добавить, добавив
(0>s?(s=-s,'-'):'')+
к возвращаемому выражению (на самом деле, также(0>s?(s=-s,'-'):0)+
будет работать).источник
Math.floor(s)
в последнюю строку для более чистых результатов. Работает отлично в любом случае, спасибо!9
и10
без дальнейших изменений; например, если вы ввели,69.25
то вывод будет1:9
вместо1:09
! Эта функция (для которой я явно указал целочисленные секунды) предназначена и с любовью создана как хрустящий инструмент / «двигатель» с высокими характеристиками (не для игры в ниндзя), и поэтому я считаю, что это неуместно обременять этот двигатель ненужной проверкой / очистка / фильтрация ...NaN
,+/-Infinity
и т. д.) и параметры округления, которые должны быть выполнены программистом перед вызовом функции, исходя из конкретных потребностей и возможных входных значений, с которыми может столкнуться приложение! Естественно, вы можете вносить исправления, если ваши доменные знания об ожидаемых входных значениях диктуют, что ваш конкретный вариант использования почти всегда получает значения с плавающей запятой, а тестирование производительности показывает, что ваше приложение. В вашем случае, когда вы хотите использовать только положительные значения, вы ДОЛЖНЫ ....(9<s?':':':0')
чтобы(10>s?':0':':')
(добавляя 1 символ , но «жертвуя» 5 из 6 истинного пути к ложным-путей) ИЛИ(10<=s?':':':0')
(добавление 2 символов , но поддержание 5 из 6 истинных путей). Тогда я советую изменить этот последний трейлинг+s
на+(s|0)
вместо тогоMath.floor(s)
, чтобы не разрушать всю прелесть отсутствия необходимости решать и вызыватьMath.floor
, все еще работая корректно во всем 53-битном+/-MAX_SAFE_INTEGER
диапазоне вместо «всего лишь» 32-битного (без знака) или 31-битного (со знаком) диапазона! Обратите внимание, чтоABS(s)
магнетуд гарантированно будет меньше 60, так что подписано ...PS: PFFT, whoever came up with just 512 char limit for any meaningful comment should be...
Вы также можете использовать собственный объект Date:
Конечно, это решение работает только для timeInSeconds менее 24 часов;)
источник
date
также может быть построен какvar date = new Date(timeInSeconds * 1000)
2019 лучший вариант
Формат
hh:mm:ss
источник
seconds
это постоянн. Вы не можете переназначить это.let
, напримерfunction display (state) { let seconds = state.seconds; ... }
, возможно, это было причиной вашей ошибки?%=
вы переназначаете этот параметр. Просто используйтеseconds%60
источник
function secondsToMinutes(time){ return Math.floor(0 / 60)+':'+('0'+Math.floor(0 % 60)).slice(-2); }
0
сtime
, я прав?function secondsToMinutes(time){ return Math.floor(time / 60) + ':' + ('0' + Math.floor(time % 60)).slice(-2) }
Чтобы добавить ведущие нули, я бы просто сделал:
Хороший и короткий
источник
Очистите один лайнер, используя ES6
источник
Один лайнер (не работает с часами):
источник
Секунды до ч: мм: сс
источник
minutes < 10 ? '0' + minutes : minutes
мне, предполагая только базовые знания JS?Следующая функция поможет вам получить дни, часы, минуты, секунды
источник
if (Days > 0){ ddhhmmss += Days + ' Day '; }
чтобыif (Days > 0) {ddhhmmss += Days === 1 ? Days + ' Day ' : Days + ' Days '};
сказать1 Day
,2 Days
и3 Days
т. Д. Подобное можно сделать для других.После всего этого, еще одно простое решение:
источник
time.setSeconds(1);
возвращает,1 0 1
когда это должно быть0 0 1
.Другое, но гораздо более элегантное решение для этого заключается в следующем:
источник
Для добавления нулей я действительно не вижу необходимости иметь полностью другую функцию, которую вы можете просто использовать, например,
Именно поэтому у нас есть условные заявления в первую очередь.
(условие? если истина: если ложь), так что если количество секунд в примере больше 9, чем просто показывать секунды, иначе добавьте строку 0 перед ним.
источник
попробуйте это: преобразование секунд в часы, минуты и секунды.
источник
источник
Если вы используете Moment.js, то вы можете использовать там встроенный
Duration
объектисточник
ОБНОВЛЕНИЕ 2020
Используя базовую математику и простой javascript, это можно сделать всего за несколько строк кода.
ПРИМЕР - конвертировать
7735 seconds
вHH:MM:SS
.МАТЕМАТИКА:
Расчеты используют:
Math.floor()
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor%
арифметический оператор (Remainder) - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#RemainderПроверьте код ниже. Секунды делятся
3600
на количество часов и остаток, который используется для вычисления количества минут и секунд.HOURS => 7735 / 3600 = 2 remainder 535
MINUTES => 535 / 60 = 8 remainder 55
SECONDS => 55
ВЕДУЩИЕ НУЛИ:
Многие ответы здесь используют сложные методы , чтобы показать количество часов, минут и секунд надлежащим образом с ведущим нулем -
45
, и04
т.д. Это может быть сделано с помощьюpadStart()
. Это работает для строк, поэтому число должно быть преобразовано в строку с помощьюtoString()
.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
КОД:
источник
Вы сделали достаточно кода для отслеживания минут и секунд.
Что вы можете сделать, это добавить фактор часов в:
Это даст вам то, что вам нужно.
источник
Я думал о более быстром способе сделать это, и это то, что я придумал
Если мы хотим преобразовать «время» в минуты и секунды, например:
источник
Поместите мои два цента в:
Итак, это:
Будет иметь следующий вывод:
Тогда вы можете напечатать это так:
источник
strftime.js ( strftime github ) - одна из лучших библиотек форматирования времени. Это очень легкий - 30 КБ - и эффективный. Используя его, вы можете легко конвертировать секунды в время в одной строке кода, полагаясь главным образом на собственный класс Date.
При создании новой даты каждый необязательный аргумент позиционируется следующим образом:
Поэтому, если вы инициализируете новую дату со всеми аргументами от нуля до секунд, вы получите:
Вы можете видеть, что 150 секунд - это 2 минуты и 30 секунд, как видно из даты создания. Затем, используя формат strftime («% M:% S» для «MM: SS»), он выведет строку минут.
В одной строке это будет выглядеть так:
Плюс это позволит вам взаимозаменяемо поддерживать ЧЧ: ММ: СС и ММ: СС в зависимости от количества секунд. Например:
И, конечно, вы можете просто передать любой формат, который вы хотите, в strftime, если вы хотите, чтобы строка времени была более или менее семантической.
Надеюсь это поможет.
источник
источник
Я предлагаю другое решение:
источник
Я знаю, что это было решено многими способами. Мне нужна была эта функция для скрипта After Effects, где скорость или загрязнение пространства имен не являются проблемой. Я бросаю это здесь для кого-то, кому нужно нечто подобное. Я также написал несколько тестов и работал нормально. Итак, вот код:
источник