2009-08-24 174 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