2009-08-24 8 views

ответ

88

Знаете ли вы, что datejs? это должно быть известно.

Использование datejs, просто написать что-то вроде:

(new Date).clearTime() 
      .addSeconds(15457) 
      .toString('H:mm:ss'); 

--update

В настоящее время date.js устарела и не поддерживается, так что используйте "Moment.js", что гораздо лучше, как указывает TJ Crowder.

+6

@Yassir и Клейтон: FWIW, DateJS не поддерживается в течение многих лет и имеет пару выдающихся ошибок (хотя, насколько мне известно, они в основном относятся к разбору и полуночи). [momentjs] (http://momentjs.com/) кажется довольно хорошим и в настоящее время поддерживается. –

+0

@ J.J. Кроудер, ты прав. Но этот ответ был дан в 2009 году, тогда это была хорошая идеация. Я обновил свой ответ. – Cleiton

+1

@Cleiton, ваш обновленный ответ не заполнен. Я попробовал это как есть и получил: 'TypeError: Object [object Date] не имеет метода clearTime. –

79

Я не думаю, что какая-либо встроенная функция стандартного объекта Date сделает это для вас таким образом, который удобнее, чем просто выполнять математику самостоятельно.

hours = Math.floor(totalSeconds/3600); 
totalSeconds %= 3600; 
minutes = Math.floor(totalSeconds/60); 
seconds = totalSeconds % 60; 
+5

да, но вы можете получить это 1: 4: 43 вместо 01:04:43 !! –

+0

Может ли недавний downvoter делиться тем, почему вы считаете, что это «не полезно»? –

+0

Есть некоторые проблемы с этим, я думаю? Когда я попробовал это, я возвращал десятичные знаки, так что 180 секунд вернут '0.05' в переменной' hours'. Я положил его в 'parseInt', который исправил его для моего дела, но я не думаю, что это было бы точно для всего. Тем не менее, это помогло мне, поэтому спасибо! – BT643

1

Я использовал этот код перед тем, чтобы создать простой объект TimeSpan:

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); 
12

Это делает трюк:

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; 
} 

(считанного из here)

3
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. 
    } 
} 
-1

Вы также можете использовать Sugar.

Date.create().reset().set({seconds: 180}).format('{mm}:{ss}'); 

В этом примере возвращается '03: 00 '.

+0

Звучит неплохо! После проверки он не возвращает 03 : 00, но для любого введенного значения, всего 00:00. – Ben

+0

Возможно, они изменили свой API. Я обновил код (это уже 2 года, и вы, вероятно, переехали, но я думал, что другие могут найти его полезным). –

1

Вы также можете использовать ниже код:

int ss = nDur%60; 
nDur = nDur/60; 
int mm = nDur%60; 
int hh = nDur/60; 
16
function formatSeconds(seconds) 
{ 
    var date = new Date(1970,0,1); 
    date.setSeconds(seconds); 
    return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1"); 
} 
+1

formatSeconds (3919); // Возврат 01:05:19 Отличная функция .. Нравится –

+0

Не работает, если вы выходите выше 24h –

-1

new Date().toString().split(" ")[4];

результате 15:08:03

24

Как Клейтон отметил в his answer, moment.js могут быть использованы для этого:

moment().startOf('day') 
     .seconds(15457) 
     .format('H:mm:ss'); 
+3

Что произойдет, если количество секунд превышает день? –

+2

@ GiladPeleg, если количество секунд превышает день, количество дней вычисляется внутри, и оно возвращает только оставшиеся часы, минуты и секунды. Если вы хотите также подсчитать количество дней, вы можете попробовать 'moment(). StartOf ('year'). Seconds (30000000) .format ('DDD HH: mm: ss')'. – artificis

+4

Что произойдет, если количество секунд превышает год? – OrangePot

5
 var timeInSec = "661"; //even it can be string 
      String.prototype.toHHMMSS = function() { 
    /* extend the String by using prototypical inheritance, 
so that you can use it to any string directly across all your app. */ 
       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); 
       var 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()); 
      console.log(timeInSec.toHHMMSS()); 

или вы можете проверить это работает здесь: http://fiddle.jshell.net/sahilosheal/N2B5J/

+0

кроме того ... если вы хотите сделать все время времени вещь легко .. использование momentJS – sheelpriy

209

Вы можете управлять, чтобы сделать это без каких-либо внешних библиотек JavaScript с помощью метода JavaScript Date, как следующее:

var date = new Date(null); 
date.setSeconds(SECONDS); // specify value for SECONDS here 
var result = date.toISOString().substr(11, 8); 
+23

I не знаю, почему каждый добавляет дополнительные библиотеки или делает математику вручную, когда это работает отлично. Благодаря! – jminardi

+61

Это может быть даже сокращено до одной строки: 'новая дата (SECONDS * 1000) .toISOString(). Substr (11, 8);' – Frank

+2

Brilliant. Без какой-либо сторонней библиотеки. Лучше – Riz

1

Для тех, кто с помощью AngularJS, простым решением является фильтрация значения с помощью date API, который преобразует миллисекунды в строку на основе запрошенного формата.Пример:

<div>Offer ends in {{ timeRemaining | date: 'HH:mm:ss' }}</div> 

Обратите внимание, что это ожидает миллисекунд, так что вы можете умножить timeRemaining на 1000, если вы хотите конвертировать секунд (как исходный вопрос был сформулирован).

2

Вот функция для преобразования секунд в формат чч-мм-сс на основе ответа powtac в here

jsfiddle

/** 
* 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 
3

Легко следовать версиям для нубов :

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); 
8

Попробуйте это:

function toTimeString(seconds) { 
    return (new Date(seconds * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0]; 
} 
6

Вот расширение класса 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>

2

После просмотра всех ответов и не быть счастливым с большинством из них, это то, что я придумал. Я знаю, что я очень опаздываю на разговор, но здесь все равно.

function secsToTime(secs){ 
    var time = new Date(); 
    // create Date object and set to today's 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

16

Я знаю, что это своего рода старый, но ...

ES2015:

var toHHMMSS = (secs) => { 
    var sec_num = parseInt(secs, 10)  
    var hours = Math.floor(sec_num/3600) % 24 
    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(13545) // 03:45:45 
toHHMMSS(180) // 03:00 
toHHMMSS(18) // 00:18 
+0

Как насчет долей секунды? 03: 45: 45.xxx? –

-1

using momentjs for singleled calculatio п

var number = 10000(milliseconds); 
var momentObject = moment.duration(number); 

var output = momentObject.hours()+"HH"+momentObject.minutes()+"MM"+minuteObject.seconds()+"S" 
3

Я просто хотел, чтобы дать небольшое пояснение к славному ответу выше:

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 
3

Эта функция должна сделать это:

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 

Смотрите также this Fiddle.

3

Взаимодействие с этой старой нитью - ОП заявлено 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" 

... Я пытался заставить его использовать наименьшее количество кода можно, хороший один-лайнер подход.

+0

Можете ли вы предоставить расширенную/читающую версию вашего кода, чтобы мы могли более легко увидеть, что происходит? Благодарю. – Kimball

4

ниже приведенный код, который будет преобразовывать секунды в формат чч-мм-сс:

var measuredTime = new Date(null); 
measuredTime.setSeconds(4995); // specify value of SECONDS 
var MHSTime = measuredTime.toISOString().substr(11, 8); 

Получить альтернативный метод из Convert seconds to HH-MM-SS format in JavaScript

2

Есть много вариантов решения этой проблемы, и очевидно, есть являются хорошим вариант предложил об этом, но я хочу добавить еще один оптимизированный код здесь

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

Смежные вопросы