Chuỗi thời gian JavaScript giây với định dạng hh: mm: ss


300

Tôi muốn chuyển đổi khoảng thời gian, tức là số giây thành chuỗi thời gian được phân tách bằng dấu hai chấm (hh: mm: ss)

Tôi tìm thấy một số câu trả lời hữu ích ở đây nhưng tất cả chúng đều nói về việc chuyển đổi sang định dạng x giờ và x phút.

Vì vậy, có một đoạn nhỏ làm điều này trong jQuery hay chỉ là JavaScript thô?


11
Điểm chuẩn của một vài câu trả lời được đề xuất trong chủ đề này. jsperf.com/ms-to-hh-mm-ss-time-format
Claudijo

Câu trả lời:


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

Bạn có thể sử dụng nó ngay bây giờ như:

alert("5678".toHHMMSS());

Đoạn trích làm việc:


1
Cảm ơn ý tưởng nguyên mẫu, tôi thích cách gọi nó dễ dàng hơn. Tôi đã tạo mẫu cho Số để tôi cũng có thể gọi nó. Tôi cũng tìm thấy câu trả lời này sẽ loại bỏ giờ và phút nếu không cần thiết.
alunford3

21
sử dụng toán tử "%" >> var phút = Math.floor ((sec_num% 3600) / 60); var giây = Math.floor (sec_num% 60);
IvanM

3
cảm ơn Tôi không thấy nó hoạt động theo cả hai cách như một chuỗi cho đến khi bạn gọi .toString () trên số nguyên. bạn có thể làm cho nó hoạt động theo cách khác bằng cách phân tích cú pháp int
Sonic Soul

51
Đừng đưa vào nguyên mẫu, chỉ cần tạo một chức năng tiện ích.
Michael J. Calkins

15
sửa đổi nguyên mẫu cho điều đó? 390 upvote? nghiêm túc?
Lukas Liesis

197

Bạn có thể quản lý để thực hiện việc này mà không cần bất kỳ thư viện JS bên ngoài nào với sự trợ giúp của phương thức Ngày JS như sau:

var date = new Date(0);
date.setSeconds(45); // specify value for SECONDS here
var timeString = date.toISOString().substr(11, 8);
console.log(timeString)


4
Tại sao câu trả lời này với rất thấp? Tôi nhận được nó vào năm 2011 có lẽ IE 7 và 8 là cơ sở không hỗ trợ nó, nhưng đến cuối năm 2014, vì vậy giải pháp đơn giản, miễn phí đơn giản này sẽ cao hơn.
Emil Borconi

2
Từ MDN: Nếu một tham số bạn chỉ định nằm ngoài phạm vi dự kiến, setSeconds () cố gắng cập nhật thông tin ngày trong đối tượng Date tương ứng. Ví dụ: nếu bạn sử dụng 100 cho giâyValue, số phút được lưu trữ trong đối tượng Ngày sẽ được tăng thêm 1 và 40 sẽ được sử dụng trong vài giây. Vì vậy, yeah, có vẻ tốt!
Andrew

40
Tôi thích câu trả lời này. Nó có thể thậm chí ngắn hơn : new Date(1000 * seconds).toISOString().substr(11, 8).
Bohumir Zamecnik

4
Câu trả lời tốt đẹp. Bạn có thể sử dụng .replace(/^[0:]+/, "")sau substrđể loại bỏ tất cả các số 0 và :từ đầu chuỗi.
Palo

1
Thêm cái này ở phía trước để xử lý thời gian hơn 24h. parseInt (d / 86400) + "d"
Tofandel

82

Để có được phần thời gian trong định dạng hh:MM:ss, bạn có thể sử dụng biểu thức chính quy này:

(Điều này đã được đề cập ở trên trong cùng một bài viết của ai đó, cảm ơn vì điều đó.)

    var myDate = new Date().toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
    console.log(myDate)


8
+1 - Siêu đơn giản; cảm ơn! Chỉ sử dụng một biến thể của điều này để chỉ hiển thị phút và giây:var myDate = new Date().toTimeString().replace(/.*(\d{2}:\d{2})(:\d{2}).*/, "$1");
Topher Fangio

1
không nên là "Ngày mới (null, null, null, null, null, timeInSecs) .toTimeString (). thay thế (/.* (\ d {2} :) (\ d {2}: \ d {2 }). * /, "$ 2") "?
obie

6
Việc sử dụng replacelà khó hiểu. Tại sao không sử dụng new Date(null, null, null, null, null, timeInSeconds).toTimeString().match(/\d{2}:\d{2}:\d{2}/)[0]?
Călin Darie

4
Điều này tốt cho việc hiển thị thời gian nhất định, nhưng lưu ý câu hỏi (và các câu trả lời khác ở đây) là về việc hiển thị thời lượng, tức là một số giây nhất định không phụ thuộc vào thời gian hiện tại.
mahemoff

4
Phiên bản đơn giản hơn của điều này:new Date().toTimeString().split(" ")[0]
Henrik N

52

Tôi khuyên dùng javascript thông thường, sử dụng đối tượng Date:

var seconds = 9999;
// multiply by 1000 because Date() requires miliseconds
var date = new Date(seconds * 1000);
var hh = date.getUTCHours();
var mm = date.getUTCMinutes();
var ss = date.getSeconds();
// If you were building a timestamp instead of a duration, you would uncomment the following line to get 12-hour (not 24) time
// if (hh > 12) {hh = hh % 12;}
// These lines ensure you have two-digits
if (hh < 10) {hh = "0"+hh;}
if (mm < 10) {mm = "0"+mm;}
if (ss < 10) {ss = "0"+ss;}
// This formats your string to HH:MM:SS
var t = hh+":"+mm+":"+ss;
document.write(t);

(Tất nhiên, đối tượng Date được tạo sẽ có một ngày thực sự được liên kết với nó, nhưng dữ liệu đó là không liên quan, vì vậy với những mục đích này, bạn không phải lo lắng về điều đó.)


Nó dường như làm cho ngày trong múi giờ địa phương, trong trường hợp của tôi thêm 1 giờ vào thời gian. Với giây = 0, tôi nhận được "01:00:00" (Thu Jan 01 1970 01:00:00 GMT + 0100 (CET)), đó là sai.
mivk

3
Tôi nhận được một kết quả chính xác nếu tôi sử dụng date.getUTCHours()date.getUTCMinutes().
mivk

Tôi không hiểu tại sao bạn lại quay lại dấu thời gian 12 giờ khi anh ấy hỏi về thời lượng?
Nathan C. Tresch

@JellicleCat Thay đổi thành +1 và tên đẹp.
Nathan C. Tresch

1
Tôi thích điều này, nhưng nó giả sử thời lượng ít hơn 24h
Rory

40

Một tìm kiếm Google cho thấy kết quả này :

function secondsToTime(secs)
{
    secs = Math.round(secs);
    var hours = Math.floor(secs / (60 * 60));

    var divisor_for_minutes = secs % (60 * 60);
    var minutes = Math.floor(divisor_for_minutes / 60);

    var divisor_for_seconds = divisor_for_minutes % 60;
    var seconds = Math.ceil(divisor_for_seconds);

    var obj = {
        "h": hours,
        "m": minutes,
        "s": seconds
    };
    return obj;
}

8
secondsToTime(119.9)=> Object {h: 0, m: 1, s: 60}. Để khắc phục điều này, hãy thêm secs = Math.round(secs);vào đầu phương thức. Tất nhiên, chúng tôi đã thấy lỗi này trong bản demo ...
Benjamin Crouzier

29

Sự thay đổi về một chủ đề. Xử lý một chữ số giây khác nhau một chút

seconds2time(0)  ->  "0s" 
seconds2time(59) -> "59s" 
seconds2time(60) -> "1:00" 
seconds2time(1000) -> "16:40" 
seconds2time(4000) -> "1:06:40"

function seconds2time (seconds) {
    var hours   = Math.floor(seconds / 3600);
    var minutes = Math.floor((seconds - (hours * 3600)) / 60);
    var seconds = seconds - (hours * 3600) - (minutes * 60);
    var time = "";

    if (hours != 0) {
      time = hours+":";
    }
    if (minutes != 0 || time !== "") {
      minutes = (minutes < 10 && time !== "") ? "0"+minutes : String(minutes);
      time += minutes+":";
    }
    if (time === "") {
      time = seconds+"s";
    }
    else {
      time += (seconds < 10) ? "0"+seconds : String(seconds);
    }
    return time;
}

Cảm ơn vì đã tiết kiệm cho tôi một giờ về việc này
starsinmypockets

29

Đây là của tôi về nó:

function formatTime(seconds) {
  const h = Math.floor(seconds / 3600);
  const m = Math.floor((seconds % 3600) / 60);
  const s = Math.round(seconds % 60);
  return [
    h,
    m > 9 ? m : (h ? '0' + m : m || '0'),
    s > 9 ? s : '0' + s
  ].filter(Boolean).join(':');
}

Kết quả dự kiến:

const expect = require('expect');
expect(formatTime(0)).toEqual('0:00');
expect(formatTime(1)).toEqual('0:01');
expect(formatTime(599)).toEqual('9:59');
expect(formatTime(600)).toEqual('10:00');
expect(formatTime(3600)).toEqual('1:00:00');
expect(formatTime(360009)).toEqual('100:00:09');
expect(formatTime(0.2)).toEqual('0:00');

Bạn có thể viết điều này như sau: const formatTime = (seconds, h = Math.floor(seconds / 3600), m = Math.floor((seconds % 3600) / 60), s = seconds % 60) => [h, m > 9 ? m : '0' + m, s > 9 ? s : '0' + s].filter(s => s).join(':');
Ruben Stolk

2
@RubenStolk Tôi thấy hơi khó hiểu khi có một hàm có hai secondđối số. Tôi thấy phiên bản của mình rõ ràng hơn ngay cả khi nó dài dòng hơn một chút.
Tom Esterez

seconds: numberloại chú thích, trong es6?
Olian04

1
Dấu phẩy @pstanton được hỗ trợ kể từ IE9: caniuse.com/#feat=mdn-javascript_grammar_trailing_commas . Cá nhân tôi chọn bỏ qua những trình duyệt cũ bây giờ. Nhưng bạn nói đúng, tôi đã xóa nó để câu trả lời chung chung hơn.
Tom Esterez

1
Giải pháp tuyệt vời. Có lẽ chỉ cần thay đổi giây nhưconst s = Math.round(seconds % 60);
Raff

16

Tôi thích câu trả lời đầu tiên. Có một số tối ưu hóa:

  • dữ liệu nguồn là một Số. tính toán bổ sung là không cần thiết.

  • thừa điện toán

Mã kết quả:

Number.prototype.toHHMMSS = function () {
    var seconds = Math.floor(this),
        hours = Math.floor(seconds / 3600);
    seconds -= hours*3600;
    var minutes = Math.floor(seconds / 60);
    seconds -= minutes*60;

    if (hours   < 10) {hours   = "0"+hours;}
    if (minutes < 10) {minutes = "0"+minutes;}
    if (seconds < 10) {seconds = "0"+seconds;}
    return hours+':'+minutes+':'+seconds;
}

1
Tôi nghĩ rằng chức năng này là một tính năng được sử dụng ở phía trước và do đó tôi lấy nguyên mẫu Chuỗi chứ không phải Số. Và Số luôn có thể là một chuỗi nhưng không phải là cách khác.
powtac

3
Tôi nghĩ Numberlà đúng bởi vì secondstrên thực tế, là một con số. bạn nên chuyển đổi từ chuỗi trước khi sử dụng chức năng này, đây là điều nên làm!
caesarsol

2
câu trả lời nâng cao, giống như câu trả lời này, là xấu. Tôi cá là bạn không cần TẤT CẢ các số để có phương pháp này. Không sửa đổi nguyên mẫu cho các công cụ tiện ích ngẫu nhiên.
Lukas Liesis

hoặc chỉ để tạo nguyên mẫu và biến nó thành một hàm numToHHMMSS hoặc strTOHHMMSS
yeahdixon

Giải pháp này hoạt động trong khi giải pháp được chọn tạo ra giây 60 cho các giá trị nhất định.
AndroidDev

14

Sử dụng thư viện khoảnh khắc tuyệt vời :

function humanizeDuration(input, units ) { 
  // units is a string with possible values of y, M, w, d, h, m, s, ms
  var duration = moment().startOf('day').add(units, input),
    format = "";

  if(duration.hour() > 0){ format += "H [hours] "; }

  if(duration.minute() > 0){ format += "m [minutes] "; }

  format += " s [seconds]";

  return duration.format(format);
}

Điều này cho phép bạn chỉ định bất kỳ thời lượng nào là giờ, phút, giây, máy xay và trả về phiên bản có thể đọc được của con người.


14
function formatTime(seconds) {
    return [
        parseInt(seconds / 60 / 60),
        parseInt(seconds / 60 % 60),
        parseInt(seconds % 60)
    ]
        .join(":")
        .replace(/\b(\d)\b/g, "0$1")
}

Giải thích thêm về lý do tại sao câu trả lời này sẽ làm việc cho người hỏi hoặc những gì có thể sai trong câu hỏi ban đầu sẽ giúp nâng cao chất lượng của câu trả lời này.
Josh Burgess

1
Khá tự giải thích và câu trả lời tốt, giảm và đơn giản hóa câu trả lời hàng đầu.
AlexioVay

Câu trả lời chính xác :)
Rishav Kumar

11

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

kết quả 15:08:03


Rất vui - cảm ơn! Và một cải tiến nhỏ mà tôi đã thực hiện cho nhu cầu của mình là chuyển đổi thời lượng tính bằng mili giây sang HH: MM: SS - new Date(new Date().getTime() - startTime).toUTCString().split(" ")[4]trong đóstartTime được đặt trước đó bằng cách sử dụng startTime = new Date().getTime();. (Tôi phải sử dụng toUTCString()vì nếu không thì thời gian đã hết một giờ.)
Richard Wiseman

10

Nó khá dễ,

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

Điều này chỉ hoạt động nếu thời gian của bạn ít hơn 1 ngày. Nhưng nếu không, khá đẹp.
cjbarth

8
s2t=function (t){
  return parseInt(t/86400)+'d '+(new Date(t%86400*1000)).toUTCString().replace(/.*(\d{2}):(\d{2}):(\d{2}).*/, "$1h $2m $3s");
}

s2t(123456);

kết quả:

1d 10h 17m 36s

6

Tôi thích Webjins trả lời nhiều nhất, vì vậy tôi đã mở rộng nó để hiển thị ngày với hậu tố quảng cáo, hiển thị có điều kiện và được bao gồm dưới dạng hậu tố trên giây đơn giản:

function sec2str(t){
    var d = Math.floor(t/86400),
        h = ('0'+Math.floor(t/3600) % 24).slice(-2),
        m = ('0'+Math.floor(t/60)%60).slice(-2),
        s = ('0' + t % 60).slice(-2);
    return (d>0?d+'d ':'')+(h>0?h+':':'')+(m>0?m+':':'')+(t>60?s:s+'s');
}

trả về "3d 16:32:12" hoặc "16:32:12" hoặc "32:12" hoặc "12s"


Điều này sẽ không chính xác trong thời gian 24 ngày hoặc lâu hơn
Charlie Martin

Tại sao bạn so sánh các chuỗi lớn hơn 0?
Jimmy Kane

@JimmyKane vì tự động đánh máy - tôi sẽ nới lỏng nó! (cộng với: mã dễ đọc hơn (bạn đã đánh máy vì một lý do, nhưng hãy ngừng trolling (cả hai chúng ta)). nó ở đầu vào!)
nïkö

@ nïkö Ok Tôi hiểu nhưng các phiên bản JS mới nghiêm ngặt hơn, linters v.v ... có thể phàn nàn về điều đó. Chỉ cần nói, dong nhận cho tôi sai. Tôi thích câu trả lời của bạn
Jimmy Kane

6

Tôi yêu câu trả lời của Powtac, nhưng tôi muốn sử dụng nó trong angular.js, vì vậy tôi đã tạo một bộ lọc bằng mã của anh ấy.

.filter('HHMMSS', ['$filter', function ($filter) {
    return function (input, decimals) {
        var sec_num = parseInt(input, 10),
            decimal = parseFloat(input) - sec_num,
            hours   = Math.floor(sec_num / 3600),
            minutes = Math.floor((sec_num - (hours * 3600)) / 60),
            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;}
        var time    = hours+':'+minutes+':'+seconds;
        if (decimals > 0) {
            time += '.' + $filter('number')(decimal, decimals).substr(2);
        }
        return time;
    };
}])

Nó giống hệt nhau về mặt chức năng, ngoại trừ việc tôi đã thêm vào trường số thập phân tùy chọn để hiển thị giây. Sử dụng nó như bất kỳ bộ lọc nào khác:

{{ elapsedTime | HHMMSS }} hiển thị: 01:23:45

{{ elapsedTime | HHMMSS : 3 }} hiển thị: 01:23:45.678


Tôi có hai đối tượng datetime và tôi muốn tính toán sự khác biệt của 2 đối tượng datetime này và trả lại đầu ra như trong định dạng này: Hour: Minutes: Giây có hai chữ số như: 01: 02: 45. Bạn có thể cho tôi biết hoặc hướng dẫn cho tôi ít với mã của bạn ??
Học tập-lật đổ-nhầm lẫn

4

Tôi nghĩ rằng hiệu suất khôn ngoan này là nhanh nhất:

var t = 34236; // your seconds
var time = ('0'+Math.floor(t/3600) % 24).slice(-2)+':'+('0'+Math.floor(t/60)%60).slice(-2)+':'+('0' + t % 60).slice(-2)
//would output: 09:30:36

Thực sự tuyệt vời. Chúc mừng!
Brynner Ferreira

Đẹp ... và> 24 giờ an toàn.
Jeffz

4
function toHHMMSS(seconds) {
    var h, m, s, result='';
    // HOURs
    h = Math.floor(seconds/3600);
    seconds -= h*3600;
    if(h){
        result = h<10 ? '0'+h+':' : h+':';
    }
    // MINUTEs
    m = Math.floor(seconds/60);
    seconds -= m*60;
    result += m<10 ? '0'+m+':' : m+':';
    // SECONDs
    s=seconds%60;
    result += s<10 ? '0'+s : s;
    return result;
}

Ví dụ

    toHHMMSS (111); 
    "01:51"

    toHHMMSS (4444);
    "01:14:04"

    toHHMMSS (33);
    "00:33"

Tôi cũng sẽ đặt một Math.floor()vài giây vì chúng có thể được đưa ra theo số thập phân. (Đã xảy ra với tôi.)
Mùa đông

3

Đây là một phiên bản khác, cũng xử lý ngày:

function FormatSecondsAsDurationString( seconds )
{
    var s = "";

    var days = Math.floor( ( seconds / 3600 ) / 24 );
    if ( days >= 1 )
    {
        s += days.toString() + " day" + ( ( days == 1 ) ? "" : "s" ) + " + ";
        seconds -= days * 24 * 3600;
    }

    var hours = Math.floor( seconds / 3600 );
    s += GetPaddedIntString( hours.toString(), 2 ) + ":";
    seconds -= hours * 3600;

    var minutes = Math.floor( seconds / 60 );
    s += GetPaddedIntString( minutes.toString(), 2 ) + ":";
    seconds -= minutes * 60;

    s += GetPaddedIntString( Math.floor( seconds ).toString(), 2 );

    return s;
}

function GetPaddedIntString( n, numDigits )
{
    var nPadded = n;
    for ( ; nPadded.length < numDigits ; )
    {
        nPadded = "0" + nPadded;
    }

    return nPadded;
}

3

Một biểu thức chính quy có thể được sử dụng để khớp với chuỗi con thời gian trong chuỗi được trả về từ toString()phương thức của đối tượng Date, được định dạng như sau: "Thu Jul 05 2012 02:45:12 GMT + 0100 (Giờ ban ngày GMT)". Lưu ý rằng giải pháp này sử dụng thời gian kể từ kỷ nguyên: nửa đêm ngày 1 tháng 1 năm 1970. Giải pháp này có thể là một lớp lót, mặc dù việc tách nó ra làm cho nó dễ hiểu hơn nhiều.

function secondsToTime(seconds) {
    const start = new Date(1970, 1, 1, 0, 0, 0, 0).getTime();
    const end = new Date(1970, 1, 1, 0, 0, parseInt(seconds), 0).getTime();
    const duration = end - start;

    return new Date(duration).toString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
}

2

Đây là cách tôi đã làm nó. Nó dường như hoạt động khá tốt, và nó cực kỳ nhỏ gọn. (Tuy nhiên, nó sử dụng rất nhiều toán tử ternary)

function formatTime(seconds) {
  var hh = Math.floor(seconds / 3600),
    mm = Math.floor(seconds / 60) % 60,
    ss = Math.floor(seconds) % 60;
  return (hh ? (hh < 10 ? "0" : "") + hh + ":" : "") + ((mm < 10) && hh ? "0" : "") + mm + ":" + (ss < 10 ? "0" : "") + ss
}

... và để định dạng chuỗi ...

String.prototype.toHHMMSS = function() {
  formatTime(parseInt(this, 10))
};

2

Bạn có thể sử dụng chức năng sau để chuyển đổi thời gian (tính bằng giây) sang HH:MM:SSđịnh dạng:

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 : ':' );
}

Không vượt qua dấu phân cách, nó sử dụng :như dấu phân cách (mặc định):

time = convertTime(13551.9941351); // --> OUTPUT = 03:45:51

Nếu bạn muốn sử dụng -như một dấu phân cách, chỉ cần chuyển nó làm tham số thứ hai:

time = convertTime(1126.5135155, '-'); // --> OUTPUT = 00-18-46

Bản giới thiệu

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 : ':' );
}

document.body.innerHTML = '<pre>' + JSON.stringify({
    5.3515555 : convertTime(5.3515555),
    126.2344452 : convertTime(126.2344452, '-'),
    1156.1535548 : convertTime(1156.1535548, '.'),
    9178.1351559 : convertTime(9178.1351559, ':'),
    13555.3515135 : convertTime(13555.3515135, ',')
}, null, '\t') +  '</pre>';

Xem thêm Fiddle này .



1

Đây là cách tôi đã làm nó

function timeFromSecs(seconds)
{
    return(
    Math.floor(seconds/86400)+'d :'+
    Math.floor(((seconds/86400)%1)*24)+'h : '+
    Math.floor(((seconds/3600)%1)*60)+'m : '+
    Math.round(((seconds/60)%1)*60)+'s');
}

timeFromSecs (22341938) sẽ trở lại '258d 14h 5m 38s'


1

Cá nhân tôi thích đơn vị hàng đầu (ngày, giờ, phút) mà không dẫn đầu. Nhưng giây phải luôn được dẫn trước bởi phút (0:13), bản trình bày này dễ dàng được coi là "thời lượng", mà không cần giải thích thêm (đánh dấu là min, giây, v.v.), có thể sử dụng bằng nhiều ngôn ngữ khác nhau (quốc tế hóa).

    // returns  (-)d.h:mm:ss(.f)
    //          (-)h:mm:ss(.f)
    //          (-)m:ss(.f)
    function formatSeconds (value, fracDigits) {
        var isNegative = false;
        if (isNaN(value)) {
            return value;
        } else if (value < 0) {
            isNegative = true;
            value = Math.abs(value);
        }
        var days = Math.floor(value / 86400);
        value %= 86400;
        var hours = Math.floor(value / 3600);
        value %= 3600;
        var minutes = Math.floor(value / 60);
        var seconds = (value % 60).toFixed(fracDigits || 0);
        if (seconds < 10) {
            seconds = '0' + seconds;
        }

        var res = hours ? (hours + ':' + ('0' + minutes).slice(-2) + ':' + seconds) : (minutes + ':' + seconds);
        if (days) {
            res = days + '.' + res;
        }
        return (isNegative ? ('-' + res) : res);
    }

// bắt chước định dạng thời lượng của phía máy chủ (.net, C #) như:

    public static string Format(this TimeSpan interval)
    {
        string pattern;
        if (interval.Days > 0)          pattern = @"d\.h\:mm\:ss";
        else if (interval.Hours > 0)    pattern = @"h\:mm\:ss";
        else                            pattern = @"m\:ss";
        return string.Format("{0}", interval.ToString(pattern));
    }

1

Bạn có thể sử dụng Momement.js với plugin định dạng thời lượng :

var seconds = 3820;
var duration = moment.duration(seconds, 'seconds');
var formatted = duration.format("hh:mm:ss");
console.log(formatted); // 01:03:40
<!-- Moment.js library -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

<!-- moment-duration-format plugin -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>

Xem thêm Fiddle này


Hoạt động như một bùa mê (ngoại trừ định dạng không được xác định) để chuyển đổi thời lượng trong một đối tượng với tháng, ngày, giờ, phút và giây
Pi Home Server

1

const secondsToTime = (seconds, locale) => {
    const date = new Date(0);
    date.setHours(0, 0, seconds, 0);
    return date.toLocaleTimeString(locale);
}
console.log(secondsToTime(3610, "en"));

trong đó tham số miền địa phương ("en", "de", v.v.) là tùy chọn


1
secToHHMM(number: number) {
    debugger;
    let hours = Math.floor(number / 3600);
    let minutes = Math.floor((number - (hours * 3600)) / 60);
    let seconds = number - (hours * 3600) - (minutes * 60);
    let H, M, S;
    if (hours < 10) H = ("0" + hours);
    if (minutes < 10) M = ("0" + minutes);
    if (seconds < 10) S = ("0" + seconds);
    return (H || hours) + ':' + (M || minutes) + ':' + (S || seconds);
}

1

Dưới đây là một lớp lót được cập nhật cho năm 2019:

//your date
var someDate = new Date("Wed Jun 26 2019 09:38:02 GMT+0100") 

var result = `${String(someDate.getHours()).padStart(2,"0")}:${String(someDate.getMinutes()).padStart(2,"0")}:${String(someDate.getSeconds()).padStart(2,"0")}`

//result will be "09:38:02"

Tôi nghĩ OP muốn chuyển đổi thời lượng (giây) không phải là một Dateđối tượng.
mrdaliri

Rất tiếc, xấu của tôi :(
DataGreed

1

Đây là một giải pháp khá đơn giản, làm tròn đến giây gần nhất!

var returnElapsedTime = function(epoch) {
  //We are assuming that the epoch is in seconds
  var hours = epoch / 3600,
      minutes = (hours % 1) * 60,
      seconds = (minutes % 1) * 60;
  return Math.floor(hours) + ":" + Math.floor(minutes) + ":" + Math.round(seconds);
}


1

Đây là một bài tôi đã viết gần đây cho MM: SS. Nó không chính xác cho câu hỏi, nhưng nó là một định dạng khác nhau.

const time = 60 * 2 + 35; // 2 minutes, 35 seconds
const str = (~~(time / 60) + "").padStart(2, '0') + ":" + (~~((time / 60) % 1 * 60) + "").padStart(2, '0');

str // 02:35

Chỉnh sửa: Điều này đã được thêm vào cho đa dạng, nhưng giải pháp tốt nhất ở đây là https://stackoverflow.com/a/25279399/639679 dưới đây.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.