JavaScript detik ke senar waktu dengan format jj: mm: dd


300

Saya ingin mengonversi durasi waktu, yaitu, jumlah detik ke string waktu yang dipisahkan oleh titik dua (jj: mm: dd)

Saya menemukan beberapa jawaban yang berguna di sini tetapi mereka semua berbicara tentang konversi ke format x jam dan x menit.

Jadi, apakah ada cuplikan kecil yang melakukan ini di jQuery atau hanya JavaScript mentah?


11
Tolok ukur beberapa jawaban yang disarankan di utas ini. jsperf.com/ms-to-hh-mm-ss-time-format
Claudijo

Jawaban:


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

Anda dapat menggunakannya sekarang seperti:

alert("5678".toHHMMSS());

Cuplikan kerja:


1
Terima kasih atas ide prototipe, saya suka bagaimana lebih mudah untuk menyebutnya. Saya membuat prototip Nomor sehingga saya bisa menyebutnya pada mereka juga. Saya juga menemukan jawaban ini yang akan menghapus jam dan menit jika tidak diperlukan.
alunsford3

21
gunakan operator "%" >> var minutes = Math.floor ((sec_num% 3600) / 60); var seconds = Math.floor (sec_num% 60);
IvanM

3
ah terima kasih. Saya tidak melihatnya bekerja dua arah sebagai string sampai Anda memanggil .toString () pada integer. Anda dapat membuatnya bekerja sebaliknya dengan menguraikan int juga
Sonic Soul

51
Jangan memakai prototipe, buat saja fungsi utilitas.
Michael J. Calkins

15
memodifikasi prototipe untuk hal semacam itu? 390 suara positif? serius?
Lukas Liesis

197

Anda dapat melakukannya tanpa perpustakaan JS eksternal dengan bantuan metode JS Date seperti berikut:

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


4
Mengapa jawaban ini begitu rendah? Saya mendapatkannya pada tahun 2011 mungkin IE 7 dan 8 adalah basis yang tidak akan mendukungnya, tapi ini akhir tahun 2014, jadi solusi sederhana dan sederhana ini harus jauh lebih tinggi.
Emil Borconi

2
Dari MDN: Jika parameter yang Anda tentukan berada di luar kisaran yang diharapkan, setSeconds () berupaya memperbarui informasi tanggal di objek Tanggal yang sesuai. Misalnya, jika Anda menggunakan 100 untuk nilai detik, menit yang disimpan di objek tanggal akan bertambah 1, dan 40 akan digunakan untuk detik. Jadi ya, terlihat bagus!
Andrew

40
Saya suka jawaban ini. Hal ini dapat lebih pendek: new Date(1000 * seconds).toISOString().substr(11, 8).
Bohumir Zamecnik

4
Jawaban bagus. Anda dapat menggunakan .replace(/^[0:]+/, "")setelah substruntuk menghapus semua nol dan :dari awal string.
Palo

1
Tambahkan ini di depan untuk menangani waktu lebih dari 24 jam. parseInt (d / 86400) + "d"
Tofandel

82

Untuk mendapatkan bagian waktu dalam format hh:MM:ss, Anda dapat menggunakan ekspresi reguler ini:

(Ini disebutkan di atas di pos yang sama oleh seseorang, terima kasih untuk itu.)

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


8
+1 - Sangat sederhana; Terima kasih! Hanya menggunakan varian ini untuk hanya menampilkan menit dan detik:var myDate = new Date().toTimeString().replace(/.*(\d{2}:\d{2})(:\d{2}).*/, "$1");
Topher Fangio

1
seharusnya bukan "Tanggal baru (null, null, null, null, null, timeInSecs) .toTimeString (). ganti (/.* (\ d {2}:) (\ d {2}: \ d {2 }). * /, "$ 2") "?
obie

6
Penggunaan replacemembingungkan. Kenapa tidak digunakan new Date(null, null, null, null, null, timeInSeconds).toTimeString().match(/\d{2}:\d{2}:\d{2}/)[0]?
Călin Darie

4
Ini bagus untuk menunjukkan waktu tertentu, tetapi perhatikan pertanyaan (dan jawaban lain di sini) adalah tentang menunjukkan durasi, yaitu jumlah detik tertentu yang tidak tergantung pada waktu saat ini.
mahemoff

4
Versi sederhana ini:new Date().toTimeString().split(" ")[0]
Henrik N

52

Saya merekomendasikan javascript biasa, menggunakan objek 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);

(Tentu saja, objek Date yang dibuat akan memiliki tanggal aktual yang terkait dengannya, tetapi data itu tidak cocok, jadi untuk tujuan ini, Anda tidak perlu khawatir tentang hal itu.)


Tampaknya membuat tanggal di zona waktu lokal, yang dalam kasus saya menambahkan 1 jam ke waktu. Dengan detik = 0, saya mendapatkan "01:00:00" (Kamis 01 Januari 1970 01:00:00 GMT + 0100 (CET)), yang salah.
mivk

3
Saya mendapatkan hasil yang benar jika saya menggunakan date.getUTCHours()dan date.getUTCMinutes().
mivk

Saya tidak mengerti mengapa Anda mengembalikan stempel waktu 12 jam ketika dia meminta durasi?
Nathan C. Tresch

@JellicleCat Berubah menjadi +1, dan nama yang bagus.
Nathan C. Tresch

1
Saya suka ini, tetapi ia menganggap durasinya kurang dari 24 jam
Rory

40

Pencarian Google menghasilkan hasil ini :

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}. Untuk memperbaikinya, tambahkan secs = Math.round(secs);di awal metode. Tentu saja, kami melihat bug ini selama demo ...
Benjamin Crouzier

29

Variasi pada suatu tema. Menangani detik satu digit sedikit berbeda

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

Terima kasih telah menyelamatkan saya satu jam untuk ini
starsinmypockets

29

Inilah pendapat saya:

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

Hasil yang diharapkan:

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

Anda bisa menulis ini sebagai: 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 Saya merasa agak membingungkan memiliki fungsi yang membutuhkan dua secondargumen. Saya menemukan versi saya lebih jelas walaupun sedikit lebih verbose.
Tom Esterez

seconds: numberketik anotasi, dalam es6?
Olian04

1
@pstanton trailing koma didukung sejak IE9: caniuse.com/#feat=mdn-javascript_grammar_trailing_commas . Saya pribadi memilih untuk mengabaikan browser lama itu sekarang. Tapi Anda benar, saya menghapusnya sehingga jawabannya lebih umum.
Tom Esterez

1
Solusi bagus Mungkin hanya mengubah detik sebagaiconst s = Math.round(seconds % 60);
Raff

16

Saya suka jawaban pertama. Ada beberapa optimasi:

  • sumber data adalah suatu Angka. perhitungan tambahan tidak diperlukan.

  • banyak kelebihan komputasi

Kode hasil:

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
Saya pikir fungsi ini adalah fitur yang digunakan di bagian depan dan karenanya saya prototipe String dan bukan Nomor. Dan Number selalu dapat berupa string tetapi tidak sebaliknya.
powtac

3
Saya pikir Numberitu benar karena secondspada kenyataannya adalah angka. Anda harus mengonversi dari string sebelum menggunakan fungsi ini, yang merupakan hal yang benar untuk dilakukan!
caesarsol

2
Jawaban tervvotifikasi, sama seperti yang ini, adalah buruk. Saya yakin Anda tidak perlu SEMUA angka untuk memiliki metode ini. Jangan modifikasi prototipe untuk hal-hal utilitas acak.
Lukas Liesis

atau hanya untuk membuat prototipe dan menjadikannya fungsi numToHHMMSS atau strTOHHMMSS
yeahdixon

Solusi ini berfungsi sementara solusi yang dipilih menghasilkan 60 detik untuk nilai-nilai tertentu.
AndroidDev

14

Menggunakan perpustakaan moment.js yang menakjubkan :

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

Ini memungkinkan Anda menentukan durasi apa pun, baik jam, menit, detik, pabrik, dan mengembalikan versi yang dapat dibaca manusia.


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

Penjelasan lebih lanjut tentang mengapa jawaban ini akan bekerja untuk si penanya atau apa yang mungkin salah dalam pertanyaan awal akan membantu meningkatkan kualitas jawaban ini.
Josh Burgess

1
Cukup jelas dan jawaban yang bagus, mengurangi dan menyederhanakan jawaban teratas.
AlexioVay

Jawaban Tepat
:)

11

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

hasil 15:08:03


Terima kasih banyak! Dan peningkatan kecil yang saya buat untuk kebutuhan saya adalah mengubah durasi dalam milidetik menjadi HH: MM: SS - di new Date(new Date().getTime() - startTime).toUTCString().split(" ")[4]mana startTimeditetapkan sebelumnya menggunakan startTime = new Date().getTime();. (Saya harus menggunakan toUTCString()karena kalau tidak waktu satu jam keluar.)
Richard Wiseman

10

Cukup mudah,

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

Ini hanya berfungsi jika durasi waktu Anda kurang dari 1 hari. Tetapi sebaliknya, cukup bagus.
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);

hasil:

1d 10h 17m 36s

6

Saya paling suka jawaban Webjins, jadi saya memperpanjangnya untuk menampilkan hari dengan akhiran iklan, menjadikan tampilan bersyarat dan dimasukkan sebagai akhiran pada detik biasa:

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

mengembalikan "3d 16:32:12" atau "16:32:12" atau "32:12" atau "12s"


Ini akan salah untuk jangka waktu 24 hari atau lebih lama
Charlie Martin

mengapa Anda membandingkan string lebih besar dari 0?
Jimmy Kane

@JimmyKane karena typecasting otomatis - saya suka! (plus: kode lebih mudah dibaca (Anda punya typecasting karena suatu alasan, tapi mari kita berhenti trolling (kami berdua)). plus: fungsi akan gagal hanya jika t adalah NaN - jadi jika Anda ingin keamanan: lakukan itu pada input!)
nïkö

@ nïkö Ok Saya mengerti tetapi versi JS baru yang lebih ketat, linter dll dapat mengeluh tentang itu. Hanya mengatakan, dong salah paham. Saya suka jawaban Anda
Jimmy Kane

6

Saya menyukai jawaban Powtac, tetapi saya ingin menggunakannya di angular.js, jadi saya membuat filter menggunakan kodenya.

.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;
    };
}])

Secara fungsional identik, kecuali bahwa saya menambahkan dalam bidang desimal opsional untuk menampilkan detik pecahan. Gunakan seperti yang Anda lakukan pada filter lain:

{{ elapsedTime | HHMMSS }} menampilkan: 01:23:45

{{ elapsedTime | HHMMSS : 3 }} menampilkan: 01:23:45.678


Saya memiliki dua objek datetime dan dan saya ingin menghitung perbedaan objek 2 datetime ini dan mengembalikan output seperti dalam format ini: Jam: Menit: Detik dengan dua digit seperti: 01: 02: 45.Bisakah Anda memberi tahu atau membimbing saya sedikit dengan kode Anda ??
Learning-Overthinker-Confused

4

Saya pikir kinerja bijaksana sejauh ini yang tercepat:

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

Sangat Luar Biasa. Selamat!
Brynner Ferreira

Bagus ... dan> 24 jam aman.
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;
}

Contohnya

    toHHMMSS (111); 
    "01:51"

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

    toHHMMSS (33);
    "00:33"

Saya akan memakai Math.floor()detik juga karena mereka mungkin diberikan dalam desimal. (Terjadi dengan saya.)
Musim dingin

3

Ini adalah versi lain, yang juga menangani beberapa hari:

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

Ekspresi reguler dapat digunakan untuk mencocokkan substring waktu dalam string yang dikembalikan dari toString()metode objek Date, yang diformat sebagai berikut: "Kamis 05 Juli 2012 02:45:12 GMT + 0100 (GMT Daylight Time)". Perhatikan bahwa solusi ini menggunakan waktu sejak zaman: tengah malam 1 Januari 1970. Solusi ini bisa menjadi satu-liner, meskipun membaginya membuatnya lebih mudah untuk dipahami.

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

Begini cara saya melakukannya. Tampaknya bekerja dengan cukup baik, dan sangat kompak. (Namun, ia menggunakan banyak operator 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
}

... dan untuk memformat string ...

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

2

Anda dapat menggunakan fungsi berikut untuk mengonversi waktu (dalam detik) ke HH:MM:SSformat:

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

Tanpa melewati pemisah, ia digunakan :sebagai pemisah (default):

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

Jika Anda ingin menggunakan -sebagai pemisah, cukup berikan sebagai parameter kedua:

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

Demo

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

Lihat juga Fiddle ini .



1

Beginilah cara saya melakukannya

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) akan mengembalikan '258d 14j 5j 38s'


1

Saya pribadi lebih suka unit terkemuka (hari, jam, menit) tanpa memimpin nol. Namun detik harus selalu dipimpin oleh menit (0:13), presentasi ini mudah dianggap sebagai 'durasi', tanpa penjelasan lebih lanjut (ditandai sebagai min, detik, dll.), Dapat digunakan dalam berbagai bahasa (internasionalisasi).

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

// meniru format sisi server (.net, C #) seperti:

    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

Anda dapat menggunakan Momement.js dengan plugin format durasi-saat :

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>

Lihat juga Fiddle ini


Bekerja seperti jimat (kecuali format yang tidak ditentukan) untuk mengonversi durasi dalam suatu objek dengan bulan, hari, jam, menit dan detik
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"));

di mana parameter lokal ("en", "de", dll.) adalah opsional


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

Berikut ini adalah one-liner yang diperbarui untuk 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"

Saya pikir OP ingin mengkonversi durasi (detik) bukan Dateobjek.
mrdaliri

oops, my buruk :(
DataGreed

1

Berikut adalah solusi yang cukup sederhana yang membulatkan ke detik terdekat!

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

Ini yang saya tulis baru-baru ini untuk MM: SS. Ini tidak tepat untuk pertanyaan, tetapi format satu-liner yang berbeda.

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

Sunting: Ini ditambahkan untuk variasi, tetapi solusi terbaik di sini adalah https://stackoverflow.com/a/25279399/639679 di bawah ini.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.