Ss: dd: ss biçiminde JavaScript saniye - zaman dizesi


300

Bir süreyi, yani, iki noktayı iki nokta üst üste işaretli zaman dizesine dönüştürmek istiyorum (ss: dd: ss)

Burada bazı yararlı cevaplar buldum ama hepsi x saat ve x dakika formatına dönüştürme hakkında konuşuyor.

Peki bunu jQuery veya sadece ham JavaScript yapan küçük bir snippet var mı?


11
Bu başlıkta önerilen cevaplardan birkaçının karşılaştırmaları. jsperf.com/ms-to-hh-mm-ss-time-format
Claudijo

Yanıtlar:


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

Şimdi şu şekilde kullanabilirsiniz:

alert("5678".toHHMMSS());

Çalışma snippet'i:


1
Prototip fikri için teşekkürler, onu çağırmanın ne kadar kolay olduğunu seviyorum. Numarayı prototipleştirdim, böylece onları da arayabilirim. Ayrıca , ihtiyaç duyulmadıkları takdirde saatleri ve dakikaları kaldıracak bu cevabı buldum .
alunsford3

21
"%" operatörünü kullanın >> var minutes = Math.floor ((sec_num% 3600) / 60); var saniye = Matematik. zemin (sec_num% 60);
IvanM

3
Ah teşekkürler. Tamsayı .toString () çağrıncaya kadar bir dize olarak her iki şekilde çalışma görmüyorum.
Sonic Soul

51
Prototipi takmayın, sadece bir yardımcı program yapın.
Michael J.Calkins

15
böyle bir şey için prototip değiştirmek? 390 upvotes? ciddi anlamda?
Lukas Liesis

199

Bunu, aşağıdaki gibi JS Date yöntemi yardımıyla herhangi bir harici JS kitaplığı olmadan yapmayı başarabilirsiniz:

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


4
Bu cevap neden bu kadar düşük? 2011'de muhtemelen IE 7 ve 8'i desteklemeyecek temeldi, ancak 2014'ün sonu, bu yüzden bu basit sade, sorunsuz çözüm çok daha yüksek olmalı.
Emil Borconi

2
MDN'den: Belirttiğiniz bir parametre beklenen aralığın dışındaysa, setSeconds () işlevi Date nesnesindeki tarih bilgilerini buna göre güncellemeye çalışır. Örneğin, secondsValue için 100 kullanırsanız, Date nesnesinde depolanan dakikalar 1 artar ve saniyeler için 40 kullanılır. Yani evet, güzel görünüyor!
Andrew

42
Bu cevabı beğendim. Daha da kısa olabilir new Date(1000 * seconds).toISOString().substr(11, 8).
Bohumir Zamecnik

4
Güzel cevap. Tüm sıfırları kaldırmak ve dizenin başlangıcından .replace(/^[0:]+/, "")sonra after substrkomutunu kullanabilirsiniz :.
Palo

1
24 saatin üzerindeki zamanı işlemek için bunu öne ekleyin. parseInt (d / 86400) + "d"
Tofandel

82

Biçimdeki saat bölümünü almak için hh:MM:ssşu normal ifadeyi kullanabilirsiniz:

(Bu yukarıda aynı kişi tarafından biri tarafından belirtilmiştir, bunun için teşekkürler.)

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


8
+1 - Çok basit; Teşekkürler! Sadece dakika ve saniyeleri göstermek için bunun bir varyantını kullandı:var myDate = new Date().toTimeString().replace(/.*(\d{2}:\d{2})(:\d{2}).*/, "$1");
Topher Fangio

1
"yeni Tarih (null, null, null, null, null, timeInSecs) .toTimeString (). replace (/.* (\ d {2}:) (\ d {2}: \ d {2 }). * /, "$ 2") "?
Ağustos'ta obie

6
Kullanımı replacekafa karıştırıcı. Neden kullanmıyorsunuz new Date(null, null, null, null, null, timeInSeconds).toTimeString().match(/\d{2}:\d{2}:\d{2}/)[0]?
Călin Darie

4
Bu, belirli bir zamanı göstermek için iyidir, ancak sorunun (ve diğer yanıtların) bir süreyi, yani geçerli saatten bağımsız olarak verilen saniye sayısını göstermekle ilgili olduğunu unutmayın.
mahemoff

4
Bunun daha basit versiyonu:new Date().toTimeString().split(" ")[0]
Henrik N

52

Date nesnesini kullanarak sıradan javascript öneririm:

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

(Elbette, oluşturulan Date nesnesinin kendisiyle ilişkilendirilmiş gerçek bir tarihi olacaktır, ancak bu veriler yabancıdır, bu nedenle bu amaçlar için endişelenmenize gerek yoktur.)


Benim durumumda zamana 1 saat ekleyen yerel saat diliminde tarih var gibi görünüyor. Saniyeler = 0 ile yanlış olur, "01:00:00" (Per 01 Ocak 1970 01:00:00 GMT + 0100 (CET)) alıyorum.
mivk

3
Ben kullanırsanız doğru sonuç almak date.getUTCHours()ve date.getUTCMinutes().
mivk

Bir süre sorduğunda neden 12 saatlik bir zaman damgasını döndürdüğünü anlamıyorum?
Nathan C.Tresch

@JellicleCat +1 ve güzel bir adla değiştirildi.
Nathan C.Tresch

1
Bunu beğendim, ancak sürenin 24 saatten az olduğunu varsayıyor
Rory

40

Bir Google araması şu sonucu verdi :

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}. Bunu düzeltmek secs = Math.round(secs);için yöntemin başına ekleyin . Tabii ki, demo sırasında bu hatayı gördük ...
Benjamin Crouzier

29

Bir tema varyasyonu. Tek basamaklı saniyeleri biraz farklı işler

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

Beni bu konuda bir saat kurtardığınız için teşekkürler
starsinmypockets

29

İşte benim almam:

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

Beklenen sonuçlar:

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

Bunu şu şekilde yazabilirsiniz: 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 İki secondargüman alan bir işleve sahip olmak biraz kafa karıştırıcı buluyorum . Sürümümü biraz daha ayrıntılı olsa bile daha net buluyorum.
Tom Esterez

seconds: numberek açıklamaları yazın, es6?
Olian04

1
@pstanton sondaki virgül IE9'dan beri desteklenmektedir: caniuse.com/#feat=mdn-javascript_grammar_trailing_commas . Şahsen ben şu eski tarayıcıları görmezden gelmeyi tercih ediyorum. Ama haklısın, kaldırdım, böylece cevap daha genel.
Tom Esterez

1
Harika bir çözüm. Belki sadece saniye olarak değiştirconst s = Math.round(seconds % 60);
Raff

16

İlk cevabı beğendim. Bazı optimizasyonlar var:

  • kaynak veri bir sayıdır. ek hesaplamalar gerekli değildir.

  • çok fazla bilgi işlem

Sonuç kodu:

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
Bence bu fonksiyon önlü ve bu nedenle I prototip Numara değil kullanılan bir özelliktir. Ve Number her zaman bir dize olabilir, ancak tam tersi olamaz.
powtac

3
Bence Numberdoğru çünkü secondsaslında bir rakam. Bu işlevi kullanmadan önce dizeden dönüştürmeniz gerekir, ki bu doğru olan şeydir!
caesarsol

2
oylanan cevap, tıpkı bunun gibi, kötüdür. Bahse girerim, bu yönteme sahip olmak için TÜM numaralara ihtiyacınız yoktur. Rasgele yardımcı programların prototipini değiştirmeyin.
Lukas Liesis

ya da sadece prototip üretmek ve numToHHMMSS veya strTOHHMMSS işlevini yapmak için
yeahdixon

Bu çözüm, seçilen çözüm belirli değerler için 60 saniye üretirken çalışır.
AndroidDev

14

Şaşırtıcı moment.js kütüphanesini kullanma :

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

Bu saat, dakika, saniye, değirmen gibi herhangi bir süreyi belirtmenize olanak tanır ve okunabilir bir sürümü döndürür.


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

Bu cevabın neden soru soran kişi için işe yarayacağına veya orijinal soruda neyin yanlış olabileceğine dair daha fazla açıklama, bu cevabın kalitesini yükseltmeye yardımcı olacaktır.
Josh Burgess

1
Oldukça kendi kendini açıklayan ve iyi cevap, üst cevabı azalttı ve basitleştirdi.
AlexioVay

Kesin Cevap
:)

11

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

sonuç 15:08:03


Güzel, teşekkürler! MM: - SS Ve ben ihtiyaçları için yapılmış küçük bir iyileşme HH milisaniye cinsinden bir süre dönüştürmek için oldu kullanılarak önceden ayarlandı . (Kullanmak zorunda kaldım çünkü aksi halde saatler bir saattir.)new Date(new Date().getTime() - startTime).toUTCString().split(" ")[4]startTimestartTime = new Date().getTime();toUTCString()
Richard Wiseman

10

Oldukça kolay,

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

Bu yalnızca zaman süreniz 1 günden azsa işe yarar. Ama aksi halde oldukça güzel.
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);

sonuç:

1d 10h 17m 36s

6

Ben Webjins en çok cevap sevdim, bu yüzden reklam son eki ile günleri görüntülemek için genişletilmiş, ekran koşullu yapılmış ve düz saniye sonek olarak dahil:

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

"3d 16:32:12" veya "16:32:12" veya "32:12" veya "12s" döndürür


Bu, 24 gün veya daha uzun süreler için yanlış olacaktır
Charlie Martin

neden 0'dan büyük dizeleri karşılaştırıyorsunuz?
Jimmy Kane

@JimmyKane çünkü otomatik daktilo - onu sevdim! (artı: kodun okunması daha kolaydır (bir nedenden dolayı daktilo yazmanız var, ancak trollemeyi bırakalım (her ikimiz de)). artı: işlev yalnızca t NaN ise başarısız olur - yani güvenlik istiyorsanız: do girişte!)
nïkö

@ nïkö Tamam anlıyorum ama daha katı yeni JS sürümleri, linters vb şikayet edebilir. Sadece dong beni yanlış anlamış. Cevabınızı seviyorum
Jimmy Kane

6

Powtac'ın cevabını sevdim, ama angular.js'de kullanmak istedim, bu yüzden kodunu kullanarak bir filtre oluşturdum.

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

İşlevsel olarak aynıdır, ancak kesirli saniyeleri görüntülemek için isteğe bağlı bir ondalık alana ekledim. Başka bir filtrede yaptığınız gibi kullanın:

{{ elapsedTime | HHMMSS }} görüntüler: 01:23:45

{{ elapsedTime | HHMMSS : 3 }} görüntüler: 01:23:45.678


İki datetime nesnem var ve bu 2 datetime nesnesinin farkını hesaplamak istiyorum ve çıktıyı şu biçimde olduğu gibi döndürmek istiyorum: Saat: Dakika: Çift basamaklı saniye sayısı: 01: 02: 45. kod ile ??
Öğrenme-Overthinker-Şaşkın

4

Performans akıllıca bu çok hızlı olduğunu düşünüyorum:

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

Gerçekten harika. Tebrikler!
Brynner Ferreira

Güzel ... ve> 24 saat güvenli.
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;
}

Örnekler

    toHHMMSS (111); 
    "01:51"

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

    toHHMMSS (33);
    "00:33"

Bir koyardım Math.floor()onlar ondalık verilebilir olabileceğinden de saniye üzerinde. (Benimle oldu.)
Kış

3

İşte günleri de işleyen başka bir sürüm:

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

Aşağıdaki şekilde toString()biçimlendirilmiş olan Date nesnesinin yönteminden döndürülen dizedeki zaman alt dizesini eşleştirmek için normal bir ifade kullanılabilir : "Per Jul 05 2012 02:45:12 GMT + 0100 (GMT Yaz Saati)". Bu çözümün çağdan beri geçen süreyi kullandığını unutmayın: 1 Ocak 1970 gece yarısı. Bu çözüm tek katmanlı olabilir, ancak ayrıştırılması anlaşılmasını kolaylaştırır.

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

İşte böyle yaptım. Oldukça iyi çalışıyor gibi görünüyor ve son derece kompakt. (Yine de çok sayıda üçlü operatör kullanır)

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
}

... ve dizeleri biçimlendirmek için ...

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

2

Zamanı (saniye cinsinden) HH:MM:SSbiçime dönüştürmek için aşağıdaki işlevi kullanabilirsiniz :

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

Bir ayırıcıyı geçmeden :, (varsayılan) ayırıcı olarak kullanır :

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

-Ayırıcı olarak kullanmak istiyorsanız , ikinci parametre olarak iletmeniz yeterlidir:

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

gösteri

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

Ayrıca bkz bu Fiddle .



1

Ben böyle yaptım

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) '258d 14h 5m 38s' döndürecek


1

Ben şahsen önde gelen birimi (gün, saat, dakika) başta sıfır olmadan tercih ederim. Ancak saniyeler her zaman dakikalar tarafından yönlendirilmelidir (0:13), bu sunum, daha fazla açıklama yapılmaksızın (min, sn (s), vb. Olarak işaretleme) kolayca kullanılabilir.

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

// sunucu tarafı (.net, C #) süre biçimlendirmesini taklit etmek:

    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

Sen kullanabilirsiniz Momement.js ile anı süreli formatlı eklentisi:

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>

Bu Ayrıca bkz keman


Aylar, günler, saat, dakika ve saniye ile bir nesne cinsinden bir süre dönüştürmek için (tanımlanmamış biçimi hariç) bir çekicilik gibi çalışır
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"));

burada yerel ayar parametresi ("en", "de" vb.) isteğe bağlıdır


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

İşte 2019 için güncellenmiş bir astar:

//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"

Bence OP bir nesneyi değil bir süreyi (saniye) dönüştürmek istiyor Date.
mrdaliri

ayy, benim kötü :(
DataGreed

1

İşte en yakın saniyeye yuvarlayan oldukça basit bir çözüm!

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

Bu MM: SS için son zamanlarda yazdım. Bu soru için kesin değildir, ancak farklı bir tek katmanlı biçimdir.

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

Düzenleme: Bu çeşitlilik için eklendi, ancak burada en iyi çözüm aşağıdaki https://stackoverflow.com/a/25279399/639679 .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.