2009-08-24 175 views

回答

88

你不知道datejs?这是一个必须知道的。

使用datejs,只写类似:

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

--update

如今date.js已经过时,不能维持,所以用 “Moment.js”,这是好多了,通过指出TJ克劳德。

+6

@Yassir和里贝罗回答:FWIW,DateJS多年来一直没有维护,并且确实有一些突出的错误(尽管据我所知,他们主要是在解析和午夜方面)。 [momentjs](http://momentjs.com/)看起来不错,目前正在维护。 – 2012-11-21 08:31:22

+0

@ J.J。克劳德,你是对的。但是,这个答案是在2009年给出的,那个时候这是一个很好的理想。我更新了我的答案。 – Cleiton 2012-12-12 20:31:21

+1

@Cleiton,您的更新答案未满。我尝试了它,得到:'TypeError:Object [object Date]没有方法'clearTime''。 – 2013-04-25 21:26:03

79

我不认为标准日期对象的任何内置功能都会以比自己做数学更方便的方式为您完成。

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

是的,但你可能会得到这个1:4:43而不是01:04:43! – 2009-08-24 14:47:10

+0

最近downvoter会喜欢分享为什么你觉得这是“没用”? – 2012-11-21 08:29:50

+0

我认为这有一些问题?当我尝试它的时候,我得到了小数点,所以180秒将会在小时变量中返回'0.05'。我把它放在一个'parseInt'里面,用于解决我的问题,但我认为这对所有的事情都是不准确的。尽管如此,这帮助了我,所以谢谢! – BT643 2014-03-18 12:08:21

1

我用这个代码之前创建一个简单的时间跨度对象:

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 2012-09-22 11:57:16

+0

他们可能已经改变了他们的API。我已经更新了代码(这已经过了2年,可能已经过时了,但我认为其他人可能会觉得它有用)。 – 2014-11-19 14:51:34

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 非常好的功能..喜欢它 – 2014-04-01 07:25:47

+0

如果你高于24小时不起作用 – 2017-12-04 09:13:50

-1

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

结果15:08:03

24

由于里贝罗在his answer指出,moment.js可以用于此:

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

如果秒数超过一天,会发生什么? – 2015-12-27 12:21:44

+2

@GiladPeleg如果秒数超过一天,天数计算在内部,它只会返回剩余的小时数,分钟数和秒数。如果你想要统计天数,你可以尝试'moment()。startOf('year')。seconds(30000000).format('DDD HH:mm:ss')'。 – artificis 2016-03-04 18:12:12

+4

如果秒数超过一年,会发生什么情况? – OrangePot 2017-05-09 21:47:21

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

此外......如果你想轻松地做所有日期时间的事情..使用时间jS – sheelpriy 2015-08-13 07:45:57

209

您可以管理要做到这一点,无需任何外部JavaScript库的JavaScript日期的帮助方法类似以下内容:

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

I不知道为什么每个人都添加额外的库或手动完成数学运算。谢谢! – jminardi 2015-04-13 23:42:28

+61

这甚至可以缩短为一行: 'new Date(SECONDS * 1000).toISOString()。substr(11,8);' – Frank 2016-01-13 20:17:54

+2

Brilliant。没有任何第三方库。这是最好的 – Riz 2016-11-25 14:31:52

1

对于任何人使用AngularJS,一简单的解决方案是用date API过滤值,该值根据请求的格式将毫秒转换为字符串。例如:

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

注意,这个预期毫秒,所以你可能希望通过1000乘timeRemaining如果你是从秒转换(因为原来的问题是制定)。

2

下面是秒转换为HH-MM-SS格式的功能基础上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

易于遵循版本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); 
8

试试这个:

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

这里是一个扩展数量级。 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? – 2017-06-16 18:54:49

-1

使用momentjs进行singleday 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

在这个旧线程中寻找--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" 

...我试图得到它使用的代码尽可能少,一个不错的单行办法。

下面
+0

您是否也可以提供代码的扩展/阅读版本,以便我们更容易地看到发生了什么?谢谢。 – Kimball 2017-06-30 02:30:01

4

是给定的代码,这将秒转换成HH-MM-ss格式:

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