Как преобразовать секунды в строку HH-MM-SS
с помощью JavaScript?
Конвертировать секунды в HH-MM-SS с помощью JavaScript?
Ответ 1
Разве вы не знаете datejs? это должно быть известно.
Используя datejs, просто напишите что-нибудь вроде:
(new Date).clearTime()
.addSeconds(15457)
.toString('H:mm:ss');
- обновление
В настоящее время date.js устарел и не поддерживается, поэтому используйте Moment.js", что намного лучше, как указано T.J. Crowder.
Ответ 2
Вы можете сделать это без какой-либо внешней библиотеки JavaScript с помощью метода JavaScript Date, как показано ниже:
var date = new Date(null);
date.setSeconds(SECONDS); // specify value for SECONDS here
var result = date.toISOString().substr(11, 8);
Или согласно @Frank комментарию; один лайнер:
new Date(SECONDS * 1000).toISOString().substr(11, 8);
Ответ 3
Я не думаю, что какая-либо встроенная функция стандартного объекта Date сделает это для вас более удобным способом, чем простая математика.
hours = Math.floor(totalSeconds / 3600);
totalSeconds %= 3600;
minutes = Math.floor(totalSeconds / 60);
seconds = totalSeconds % 60;
Пример:
let totalSeconds = 28565;
let hours = Math.floor(totalSeconds / 3600);
totalSeconds %= 3600;
let minutes = Math.floor(totalSeconds / 60);
let seconds = totalSeconds % 60;
console.log("hours: " + hours);
console.log("minutes: " + minutes);
console.log("seconds: " + seconds);
// If you want strings with leading zeroes:
minutes = String(minutes).padStart(2, "0");
hours = String(hours).padStart(2, "0");
seconds = String(seconds).padStart(2, "0");
console.log(hours + ":" + minutes + ":" + seconds);
Ответ 4
Я знаю, что это довольно старое, но...
ES2015:
var toHHMMSS = (secs) => {
var sec_num = parseInt(secs, 10)
var hours = Math.floor(sec_num / 3600)
var minutes = Math.floor(sec_num / 60) % 60
var seconds = sec_num % 60
return [hours,minutes,seconds]
.map(v => v < 10 ? "0" + v : v)
.filter((v,i) => v !== "00" || i > 0)
.join(":")
}
Это выведет:
toHHMMSS(129600) // 36:00:00
toHHMMSS(13545) // 03:45:45
toHHMMSS(180) // 03:00
toHHMMSS(18) // 00:18
Ответ 5
Как отметил Клитон в своем ответе, для этого можно использовать moment.js:
moment().startOf('day')
.seconds(15457)
.format('H:mm:ss');
Ответ 6
function formatSeconds(seconds)
{
var date = new Date(1970,0,1);
date.setSeconds(seconds);
return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
}
Ответ 7
Это трюк:
function secondstotime(secs)
{
var t = new Date(1970,0,1);
t.setSeconds(secs);
var s = t.toTimeString().substr(0,8);
if(secs > 86399)
s = Math.floor((t - Date.parse("1/1/70")) / 3600000) + s.substr(2);
return s;
}
(Источник здесь)
Ответ 8
var timeInSec = "661"; //even it can be string
String.prototype.toHHMMSS = function () {
/* extend the String by using prototypical inheritance */
var seconds = parseInt(this, 10); // don't forget the second param
var hours = Math.floor(seconds / 3600);
var minutes = Math.floor((seconds - (hours * 3600)) / 60);
seconds = seconds - (hours * 3600) - (minutes * 60);
if (hours < 10) {hours = "0"+hours;}
if (minutes < 10) {minutes = "0"+minutes;}
if (seconds < 10) {seconds = "0"+seconds;}
var time = hours+':'+minutes+':'+seconds;
return time;
}
alert("5678".toHHMMSS()); // "01:34:38"
console.log(timeInSec.toHHMMSS()); //"00:11:01"
мы можем сделать эту функцию намного короче и четче, но это снижает удобочитаемость, поэтому мы напишем ее настолько просто, насколько это возможно и максимально стабильно.
или вы можете проверить это, работая здесь:
Ответ 9
Попробуйте следующее:
function toTimeString(seconds) {
return (new Date(seconds * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];
}
Ответ 10
Вот расширение класса Number. toHHMMSS() преобразует секунды в строку hh: mm: ss.
Number.prototype.toHHMMSS = function() {
var hours = Math.floor(this / 3600) < 10 ? ("00" + Math.floor(this / 3600)).slice(-2) : Math.floor(this / 3600);
var minutes = ("00" + Math.floor((this % 3600) / 60)).slice(-2);
var seconds = ("00" + (this % 3600) % 60).slice(-2);
return hours + ":" + minutes + ":" + seconds;
}
// Usage: [number variable].toHHMMSS();
// Here is a simple test
var totalseconds = 1234;
document.getElementById("timespan").innerHTML = totalseconds.toHHMMSS();
// HTML of the test
<div id="timespan"></div>
Ответ 11
Простая версия для noobies:
var totalNumberOfSeconds = YOURNUMBEROFSECONDS;
var hours = parseInt( totalNumberOfSeconds / 3600 );
var minutes = parseInt( (totalNumberOfSeconds - (hours * 3600)) / 60 );
var seconds = Math.floor((totalNumberOfSeconds - ((hours * 3600) + (minutes * 60))));
var result = (hours < 10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes) + ":" + (seconds < 10 ? "0" + seconds : seconds);
console.log(result);
Ответ 12
Эта функция должна сделать это:
var convertTime = function (input, separator) {
var pad = function(input) {return input < 10 ? "0" + input : input;};
return [
pad(Math.floor(input / 3600)),
pad(Math.floor(input % 3600 / 60)),
pad(Math.floor(input % 60)),
].join(typeof separator !== 'undefined' ? separator : ':' );
}
Не передавая разделитель, он использует :
в качестве (по умолчанию) разделителя:
time = convertTime(13551.9941351); // --> OUTPUT = 03:45:51
Если вы хотите использовать -
в качестве разделителя, просто передайте его как второй параметр:
time = convertTime(1126.5135155, '-'); // --> OUTPUT = 00-18-46
См. также эту скрипку.
Ответ 13
Я просто хотел немного пояснить хороший ответ выше:
var totalSec = new Date().getTime() / 1000;
var hours = parseInt( totalSec / 3600 ) % 24;
var minutes = parseInt( totalSec / 60 ) % 60;
var seconds = totalSec % 60;
var result = (hours < 10 ? "0" + hours : hours) + "-" + (minutes < 10 ? "0" + minutes : minutes) + "-" + (seconds < 10 ? "0" + seconds : seconds);
Во второй строке, так как 3600 секунд за 1 час, мы делим общее количество секунд на 3600, чтобы получить общее количество часов. Мы используем parseInt для удаления любого десятичного знака. Если totalSec составлял 12600 (3 с половиной часа), то parseInt (totalSec/3600) вернется 3, так как у нас будет 3 полных часа. Зачем нам нужен% 24 в этом случае? Если мы превысим 24 часа, скажем, у нас есть 25 часов (90000 секунд), то по модулю здесь мы снова вернемся к 1, а не возвратимся 25. Он ограничивает результат в течение 24-часового предела, так как есть 24 часа В течение одного дня.
Когда вы увидите что-то вроде этого:
25 % 24
Подумайте об этом так:
25 mod 24 or what is the remainder when we divide 25 by 24
Ответ 14
Включение в эту старую нить - OP заявила HH: MM: SS, и многие из решений работают, пока вы не поймете, что вам нужно больше 24 часов. И, может быть, вам не нужно больше одной строки кода. Вот вы:
d=(s)=>{f=Math.floor;g=(n)=>('00'+n).slice(-2);return f(s/3600)+':'+g(f(s/60)%60)+':'+g(s%60)}
Он возвращает H +: MM: SS. Чтобы использовать его, просто используйте:
d(91260); // returns "25:21:00"
d(960); // returns "0:16:00"
... Я попытался использовать его для наименьшего количества кода, для приятного подхода с одним лайнером.
Ответ 15
ниже приведен код, который преобразует секунды в формат hh-mm-ss:
var measuredTime = new Date(null);
measuredTime.setSeconds(4995); // specify value of SECONDS
var MHSTime = measuredTime.toISOString().substr(11, 8);
Получить альтернативный метод из Преобразовать секунды в формат HH-MM-SS в JavaScript
Ответ 16
var time1 = date1.getTime();
var time2 = date2.getTime();
var totalMilisec = time2 - time1;
alert(DateFormat('hh:mm:ss',new Date(totalMilisec)))
/* ----------------------------------------------------------
* Field | Full Form | Short Form
* -------------|--------------------|-----------------------
* Year | yyyy (4 digits) | yy (2 digits)
* Month | MMM (abbr.) | MM (2 digits)
| NNN (name) |
* Day of Month | dd (2 digits) |
* Day of Week | EE (name) | E (abbr)
* Hour (1-12) | hh (2 digits) |
* Minute | mm (2 digits) |
* Second | ss (2 digits) |
* ----------------------------------------------------------
*/
function DateFormat(formatString,date){
if (typeof date=='undefined'){
var DateToFormat=new Date();
}
else{
var DateToFormat=date;
}
var DAY = DateToFormat.getDate();
var DAYidx = DateToFormat.getDay();
var MONTH = DateToFormat.getMonth()+1;
var MONTHidx = DateToFormat.getMonth();
var YEAR = DateToFormat.getYear();
var FULL_YEAR = DateToFormat.getFullYear();
var HOUR = DateToFormat.getHours();
var MINUTES = DateToFormat.getMinutes();
var SECONDS = DateToFormat.getSeconds();
var arrMonths = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var arrDay=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
var strMONTH;
var strDAY;
var strHOUR;
var strMINUTES;
var strSECONDS;
var Separator;
if(parseInt(MONTH)< 10 && MONTH.toString().length < 2)
strMONTH = "0" + MONTH;
else
strMONTH=MONTH;
if(parseInt(DAY)< 10 && DAY.toString().length < 2)
strDAY = "0" + DAY;
else
strDAY=DAY;
if(parseInt(HOUR)< 10 && HOUR.toString().length < 2)
strHOUR = "0" + HOUR;
else
strHOUR=HOUR;
if(parseInt(MINUTES)< 10 && MINUTES.toString().length < 2)
strMINUTES = "0" + MINUTES;
else
strMINUTES=MINUTES;
if(parseInt(SECONDS)< 10 && SECONDS.toString().length < 2)
strSECONDS = "0" + SECONDS;
else
strSECONDS=SECONDS;
switch (formatString){
case "hh:mm:ss":
return strHOUR + ':' + strMINUTES + ':' + strSECONDS;
break;
//More cases to meet your requirements.
}
}
Ответ 17
Вы пытались добавить секунды к объекту Date?
var dt = new Date();
dt.addSeconds(1234);
Образец: https://jsfiddle.net/j5g2p0dc/5/
Обновлено: ссылка отсутствует, поэтому я создал новую.
Ответ 18
Вот функция преобразования секунд в формат hh-mm-ss на основе ответа powtac здесь
/**
* Convert seconds to hh-mm-ss format.
* @param {number} totalSeconds - the total seconds to convert to hh- mm-ss
**/
var SecondsTohhmmss = function(totalSeconds) {
var hours = Math.floor(totalSeconds / 3600);
var minutes = Math.floor((totalSeconds - (hours * 3600)) / 60);
var seconds = totalSeconds - (hours * 3600) - (minutes * 60);
// round seconds
seconds = Math.round(seconds * 100) / 100
var result = (hours < 10 ? "0" + hours : hours);
result += "-" + (minutes < 10 ? "0" + minutes : minutes);
result += "-" + (seconds < 10 ? "0" + seconds : seconds);
return result;
}
Пример использования
var seconds = SecondsTohhmmss(70);
console.log(seconds);
// logs 00-01-10
Ответ 19
Посмотрев на все ответы и не довольный большинством из них, это то, что я придумал. Я знаю, что я очень опаздываю на разговор, но здесь все равно.
function secsToTime(secs){
var time = new Date();
// create Date object and set to today date and time
time.setHours(parseInt(secs/3600) % 24);
time.setMinutes(parseInt(secs/60) % 60);
time.setSeconds(parseInt(secs%60));
time = time.toTimeString().split(" ")[0];
// time.toString() = "HH:mm:ss GMT-0800 (PST)"
// time.toString().split(" ") = ["HH:mm:ss", "GMT-0800", "(PST)"]
// time.toTimeString().split(" ")[0]; = "HH:mm:ss"
return time;
}
Я создаю новый объект Date, изменяю время на мои параметры, конвертирую объект Date в строку времени и удаляю дополнительный материал, разбивая строку и возвращая только ту часть, которая вам нужна.
Я думал, что поделюсь этим подходом, поскольку он устраняет необходимость в регулярной, логической и математической акробатике, чтобы получить результаты в формате "HH: mm: ss", а вместо этого опирается на встроенные методы.
Вы можете посмотреть здесь документацию: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
Ответ 20
Есть много вариантов решения этой проблемы, и очевидно, что есть хороший вариант, о котором идет речь, но я хочу добавить еще один оптимизированный код здесь.
function formatSeconds(sec) {
return [(sec / 3600), ((sec % 3600) / 60), ((sec % 3600) % 60)]
.map(v => v < 10 ? "0" + parseInt(v) : parseInt(v))
.filter((i, j) => i !== "00" || j > 0)
.join(":");
}
если вы не хотите отформатировать нуль с числом меньше 10, вы можете использовать
function formatSeconds(sec) {
return parseInt(sec / 3600) + ':' + parseInt((sec % 3600) / 60) + ':' + parseInt((sec % 3600) % 60);
}
Пример кода http://fiddly.org/1c476/1
Ответ 21
В одной строке, используя решение TJ Crowder:
secToHHMMSS = seconds => '${Math.floor(seconds / 3600)}:${Math.floor((seconds % 3600) / 60)}:${Math.floor((seconds % 3600) % 60)}'
В одной строке другое решение, которое также учитывает дни:
secToDHHMMSS = seconds => '${parseInt(seconds / 86400)}d ${new Date(seconds * 1000).toISOString().substr(11, 8)}'
Источник: https://gist.github.com/martinbean/2bf88c446be8048814cf02b2641ba276
Ответ 22
var sec_to_hms = function(sec){
var min, hours;
sec = sec - (min = Math.floor(sec/60))*60;
min = min - (hours = Math.floor(min/60))*60;
return (hours?hours+':':'') + ((min+'').padStart(2, '0')) + ':'+ ((sec+'').padStart(2, '0'));
}
alert(sec_to_hms(2442542));
Ответ 23
Вы также можете использовать код ниже:
int ss = nDur%60;
nDur = nDur/60;
int mm = nDur%60;
int hh = nDur/60;
Ответ 24
new Date().toString().split(" ")[4];
результат 15:08:03
Ответ 25
Для любого пользователя, использующего AngularJS, простым решением является фильтрация значения с помощью API дат, который преобразует миллисекунды в строка на основе запрошенного формата. Пример:
<div>Offer ends in {{ timeRemaining | date: 'HH:mm:ss' }}</div>
Обратите внимание, что это ожидает миллисекунды, поэтому вы можете захотеть умножить timeRemaining на 1000, если вы конвертируете с секунд (как был сформулирован исходный вопрос).
Ответ 26
Я столкнулся с случаем, когда некоторые упоминали, что количество секунд больше дня. Вот адаптированная версия @Harish Anchu с самым высоким рейтингом ответа, который учитывает более длительные периоды времени:
function secondsToTime(seconds) {
const arr = new Date(seconds * 1000).toISOString().substr(11, 8).split(':');
const days = Math.floor(seconds / 86400);
arr[0] = parseInt(arr[0], 10) + days * 24;
return arr.join(':');
}
Пример:
secondsToTime(101596) // outputs '28:13:16' as opposed to '04:13:16'
Ответ 27
String.prototype.toHHMMSS = function () {
var sec_num = parseInt(this, 10); // don't forget the second param
var hours = Math.floor(sec_num / 3600);
var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
var seconds = sec_num - (hours * 3600) - (minutes * 60);
if (hours < 10) {hours = "0"+hours;}
if (minutes < 10) {minutes = "0"+minutes;}
if (seconds < 10) {seconds = "0"+seconds;}
return hours+':'+minutes+':'+seconds;
}
Пример использования
alert("186".toHHMMSS());
Ответ 28
Ни один из ответов здесь не удовлетворяет моим требованиям, так как я хочу быть в состоянии справиться
- Большое количество секунд (дней) и
- Отрицательные числа
Хотя это не требуется ФП, эффективная практика заключается в том, чтобы охватить крайние случаи, особенно когда это требует небольших усилий.
Совершенно очевидно, что ОП означает НЕСКОЛЬКО секунд, когда он говорит секунды. Зачем привязывать вашу функцию к String
?
function secondsToTimeSpan(seconds) {
const value = Math.abs(seconds);
const days = Math.floor(value / 1440);
const hours = Math.floor((value - (days * 1440)) / 3600);
const min = Math.floor((value - (days * 1440) - (hours * 3600)) / 60);
const sec = value - (days * 1440) - (hours * 3600) - (min * 60);
return '${seconds < 0 ? '-':''}${days > 0 ? days + '.':''}${hours < 10 ? '0' + hours:hours}:${min < 10 ? '0' + min:min}:${sec < 10 ? '0' + sec:sec}'
}
secondsToTimeSpan(0); // => 00:00:00
secondsToTimeSpan(1); // => 00:00:01
secondsToTimeSpan(1440); // => 1.00:00:00
secondsToTimeSpan(-1440); // => -1.00:00:00
secondsToTimeSpan(-1); // => -00:00:01
Ответ 29
Я использовал этот код раньше, чтобы создать простой объект timepan:
function TimeSpan(time) {
this.hours = 0;
this.minutes = 0;
this.seconds = 0;
while(time >= 3600)
{
this.hours++;
time -= 3600;
}
while(time >= 60)
{
this.minutes++;
time -= 60;
}
this.seconds = time;
}
var timespan = new Timespan(3662);
Ответ 30
Может быть, что-то вроде этого:
var Convert = function (time) {
const HOUR = 60 * 60;
const MINUTE = 60;
var minutesInSeconds = time % HOUR;
var hours = Math.floor(time / HOUR);
var minutes = Math.floor(minutesInSeconds / MINUTE)
var seconds = minutesInSeconds % MINUTE;
return hours.padStart(2, 0) + ':' + minutes.padStart(2, 0) + ':' + seconds.padStart(2, 0);
}