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?

Medk
sumber
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:

powtac
sumber
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)

Harish Anchu
sumber
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)

Raj
sumber
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.)

JellicleCat
sumber
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;
}
Ash Burlaczenko
sumber
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;
}
jottos
sumber
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');
Tom Esterez
sumber
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;
}
Serge K.
sumber
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.

Pradeep
sumber
14
function formatTime(seconds) {
    return [
        parseInt(seconds / 60 / 60),
        parseInt(seconds / 60 % 60),
        parseInt(seconds % 60)
    ]
        .join(":")
        .replace(/\b(\d)\b/g, "0$1")
}
meiyang
sumber
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

Artem Kyba
sumber
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];
}
Hung Vo
sumber
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
Andy Wu
sumber
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"

nïkö
sumber
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

Mordred
sumber
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
Rutger van Baren
sumber
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"
mashi
sumber
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;
}
M Katz
sumber
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");
}
Ninjakannon
sumber
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))
};
rookie1024
sumber
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 .

John Slegers
sumber
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'

dt192
sumber
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));
    }
Peter Zehnder
sumber
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

Oleksiy Kachynskyy
sumber
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

JukkaP
sumber
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);
}
Israel
sumber
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"
DataGreed
sumber
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);
}

CommandoScorch
sumber
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.

Matt Kenefick
sumber