Javascript saniye ila dakika ve saniye


170

Bu yaygın bir sorundur, ancak nasıl çözüleceğinden emin değilim. Aşağıdaki kod iyi çalışıyor.

var mind = time % (60 * 60);
var minutes = Math.floor(mind / 60);

var secd = mind % 60;
var seconds = Math.ceil(secd);

Ancak, 1 saat veya 3600 saniyeye ulaştığımda 0 dakika ve 0 saniye geri döner. Tüm dakikaları döndürmesi için bunu nasıl önleyebilirim?

Teşekkürler


Çünkü zaman = 3600, 3600% 3600 her zaman 0 ... yani hesaplamanıza göre diğer her şey 0 olacaktır.
MSI

Yanıtlar:


338

Tam dakika sayısını elde etmek için toplam saniye sayısını 60'a (60 saniye / dakika) bölün:

var minutes = Math.floor(time / 60);

Ve kalan saniyeleri elde etmek için, tam dakikaları 60 ile çarpın ve toplam saniyeden çıkarın:

var seconds = time - minutes * 60;

Şimdi de tam saatleri almak istiyorsanız, toplam saniye sayısını önce 3600'e (60 dakika / saat · 60 saniye / dakika) bölün, ardından kalan saniyeleri hesaplayın:

var hours = Math.floor(time / 3600);
time = time - hours * 3600;

Sonra tam dakikaları ve kalan saniyeleri hesaplarsınız.

Bonus:

Zamanı güzel yazdırmak için aşağıdaki kodu kullanın (Dru tarafından önerilen)

function str_pad_left(string,pad,length) {
    return (new Array(length+1).join(pad)+string).slice(-length);
}

var finalTime = str_pad_left(minutes,'0',2)+':'+str_pad_left(seconds,'0',2);

57
'Var seconds = time% 60' yaparak kalan saniyeleri almak biraz daha temiz.
Edward D'Souza

11
@Radio önde gelen sıfırları kullanarak function str_pad_left(string,pad,length){ return (new Array(length+1).join(pad)+string).slice(-length); } var finalTime = str_pad_left(minutes,'0',2)+':'+str_pad_left(seconds,'0',2);
Dru

1
Bu çözüm, öğesinin negatif değerleri için çalışmaz time. Örneğin -1 saniye girerseniz -1 dakika ve 59 saniye geri alırsınız ...
Pylinux

5
Olumsuz olmanın anlamı nedir time? Mantıksal olarak bir zaman farkı her zaman olumludur
mcont

4
Saniyeler içinde modül sayısını kullanabilirsiniz, bence daha okunabilir. var seconds = time % 60
JCM

106

Başka bir fantezi çözüm:

function fancyTimeFormat(duration)
{   
    // Hours, minutes and seconds
    var hrs = ~~(duration / 3600);
    var mins = ~~((duration % 3600) / 60);
    var secs = ~~duration % 60;

    // Output like "1:01" or "4:03:59" or "123:03:59"
    var ret = "";

    if (hrs > 0) {
        ret += "" + hrs + ":" + (mins < 10 ? "0" : "");
    }

    ret += "" + mins + ":" + (secs < 10 ? "0" : "");
    ret += "" + secs;
    return ret;
}

~~bir kısayol Math.floor, daha fazla bilgi için bu bağlantıya bakın

Çevrimiçi deneyin


14
Ne anlama geliyor ~~?
mcont

9
Bunun için basit bir stenografi Math.floor, bu bağlantıya bakın .
lapin

İşi iyi ..... :) Değeri bu şekilde yuvarlayabilirsiniz hrs = hrs.toFixed (0); dakika = dakika.Sabit (0); secs = secs.toSabit (0);
Abdul Khaliq

1
Bu çözüm için teşekkürler! time = math.round(time)Bana yuvarlatılmış saniyeler vermek için ilk satıra ekledim .
fotoflo

Bu daha doğru çözümdür. Yukarıda belirtildiği gibi, bu sayfada en çok oy alan çözüm 180 saniye olarak 2m60s olarak görüntülenir.
SongBox

71

Saniyeler içinde biçimlendirmek için hızlı ve basit ve kısa bir çözüm umuyorlar M:SS:

function fmtMSS(s){return(s-(s%=60))/60+(9<s?':':':0')+s}

.. yapılır
işlev kabul ya bir Number(tercih edilir) ya da bir String(bu prepending ile yarıya 2 dönüşüm 'cezaları' +işlev çağrısını argümanından solarak: fmtMSS(+strSeconds)) bir pozitif tam sayı saniye temsil sbağımsız değişken olarak.

Örnekler:

fmtMSS(    0 );  //   0:00
fmtMSS(   '8');  //   0:08
fmtMSS(    9 );  //   0:09
fmtMSS(  '10');  //   0:10
fmtMSS(   59 );  //   0:59
fmtMSS( +'60');  //   1:00
fmtMSS(   69 );  //   1:09
fmtMSS( 3599 );  //  59:59
fmtMSS('3600');  //  60:00
fmtMSS('3661');  //  61:01
fmtMSS( 7425 );  // 123:45

Yıkmak:

function fmtMSS(s){   // accepts seconds as Number or String. Returns m:ss
  return( s -         // take value s and subtract (will try to convert String to Number)
          ( s %= 60 ) // the new value of s, now holding the remainder of s divided by 60 
                      // (will also try to convert String to Number)
        ) / 60 + (    // and divide the resulting Number by 60 
                      // (can never result in a fractional value = no need for rounding)
                      // to which we concatenate a String (converts the Number to String)
                      // who's reference is chosen by the conditional operator:
          9 < s       // if    seconds is larger than 9
          ? ':'       // then  we don't need to prepend a zero
          : ':0'      // else  we do need to prepend a zero
        ) + s ;       // and we add Number s to the string (converting it to String as well)
}

Not: Negatif aralık (0>s?(s=-s,'-'):'')+, dönüş ifadesine eklenerek eklenebilir (aslında (0>s?(s=-s,'-'):0)+de işe yarayabilir).


Daha Math.floor(s)temiz sonuçlar için son satıra eklemenizi öneririm . Yine de harika çalışıyor, teşekkürler!
Diego Fortes

@PossessWithin: Hayır, gereken DEĞİL şeyden dolayı, çoklu nedenlerden dolayı (arıza-parçacığının) "son satırına Math.floor (ler) ekleyin" bir hata getirecek arasındaki değerler için 9ve 10ayrıca değişiklik yapmadan; örneğin girerseniz 69.25çıktı 1:9yerine 1:09! Bu işlev (bunun için tamsayı saniyelerini açıkça belirttim), yüksek perf sıkma aracı / 'motor' (boyut için ninja-golfçü değil) olarak tasarlanmıştır ve sevgiyle, bu motoru gereksiz doğrulama ile yüklemeyi uygun görmüyorum / temizleme / filtreleme ...
GitaarLAB

... işi (gibi NaN, +/-Infinityvs.) ve-seçenekleri yuvarlama programcı tarafından yapılmalıdır, önceki uygulama karşılaşmak anlamına özel ihtiyaçları ve olası girdi-değerlerine dayalı, işlevini çağırmak için! Doğal olarak, beklenen girdi değerleri hakkındaki alan bilginiz , özel kullanım durumunuzun neredeyse her zaman kayan nokta değerleri aldığını ve perf testi uygulamanızın belirtildiğini belirtiyorsa, onu yamalamakta özgürsünüz . Sadece pozitif değerlerin döşemesinde yama yapmak istediğiniz durumda GEREKİR ....
GitaarLAB

... değiştirmek (9<s?':':':0')için (10>s?':0':':')(1 kömürü ilave ancak 'feda 5' 6 üzerinden gerçek-yolları yanlış yollara) OR (10<=s?':':':0')(2 karakter ilave fakat 5 6 üzerinden gerçek yolları muhafaza edilmesi). Sonra ben tavsiye bu son sondaki değiştirmek +siçin +(s|0) yerine Math.floor(s) güzelliğini yok etmez gelince, değil kararlılığı ve çağrıya gerek Math.floor ise hala üzerinde düzgün çalışıyor bütün 53bit +/-MAX_SAFE_INTEGER'sadece' (imzasız) 32bit veya 31bit yerine aralıkta (imzalı) aralığı! O Not ABS(s)... imzalı böylece magnetude 60 daha küçük olması sağlanır
GitaarLAB

... bitsel olarak imzalandı VEYA güvenlidir. Ayrıca , kalan saniyeleri döşemeden yapılan bu özel modifikasyonun , fonksiyon çıkışını kesirli sıfırlar olmadan kesirli saniyeler haline getireceğini, ancak genellikle muhtemelen ele almanız gereken 3'ten fazla sıfırdan farklı önemli fraksiyonel basamağa sahip olacağını unutmayın. Son olarak, negatif aralık için isteğe bağlı ön düzeltme kodu ile birleştirildiğinde, bu özel değişiklik saniyeleri etkili bir şekilde TRUNCate eder ( YERLEŞTİRMEZ ). PS: PFFT, whoever came up with just 512 char limit for any meaningful comment should be...
GitaarLAB

21

Yerel Date nesnesini de kullanabilirsiniz:

var date = new Date(null);
date.setSeconds(timeInSeconds);

// retrieve time ignoring the browser timezone - returns hh:mm:ss
var utc = date.toUTCString();
// negative start index in substr does not work in IE 8 and earlier
var time = utc.substr(utc.indexOf(':') - 2, 8)

// retrieve each value individually - returns h:m:s
var time = date.getUTCHours() + ':' + date.getUTCMinutes() + ':' +  date.getUTCSeconds();

// does not work in IE8 and below - returns hh:mm:ss
var time = date.toISOString().substr(11, 8);

// not recommended - only if seconds number includes timezone difference
var time = date.toTimeString().substr(0, 8);

Tabii ki bu çözüm sadece 24 saatten daha kısa süreliğine çalışır;)


1
Date nesnesinin biçimlendirmeyi işlemesine izin vermeyi düşünmemiştim. Daha az esnek, ancak ss: dd: ss (veya bunun bir alt bölümünü) istiyorsanız bu harika
MartinAnsty

Bunu 25 saniye ile denedim ve 01:00:25, 1 saat 25 saniyeye denk geldi.
timstermatic

Evet, muhtemelen saat diliminizden dolayı. Bu durumu ele almak için çözümü güncelledim.
hamczu

dateolarak da inşa edilebilirvar date = new Date(timeInSeconds * 1000)
Nuno André

20

2019 En İyi Varyant

Biçim hh:mm:ss

console.log(display(60 * 60 * 2.5 + 25)) // 2.5 hours + 25 seconds

function display (seconds) {
  const format = val => `0${Math.floor(val)}`.slice(-2)
  const hours = seconds / 3600
  const minutes = (seconds % 3600) / 60

  return [hours, minutes, seconds % 60].map(format).join(':')
}


hmmm, secondssabittir. yeniden atayamazsınız.
ronapelbaum

@ronapelbaum bu argüman, sabit değil, ne demek istediğini anlamıyorum
Илья Зеленько

@ronapelbaum Eğer parametre olarak kullanmak yerine saniye atarsanız let, örneğin function display (state) { let seconds = state.seconds; ... }, belki de hatanız nereden geldi?
retrovertigo

Bir fonksiyon parametresi sabit olarak ele alınmalıdır. Kullandığınızda %=bu param'i yeniden atarsınız. Sadece kullanınseconds%60
ronapelbaum

16
function secondsToMinutes(time){
    return Math.floor(time / 60)+':'+Math.floor(time % 60);
}

3
Bu saniye sıfır doldurma ile geliştirilebilir: function secondsToMinutes(time){ return Math.floor(0 / 60)+':'+('0'+Math.floor(0 % 60)).slice(-2); }
Kus

Güzel! teşekkür ederim @ Kus. Sadece bu iki 0s ile değiştirmek isteyebilirsiniz time, doğru muyum?
mikey

2
@mikey ayy! Evet,function secondsToMinutes(time){ return Math.floor(time / 60) + ':' + ('0' + Math.floor(time % 60)).slice(-2) }
Kus

12

Baştaki sıfırları eklemek için şunu yapardım:

var minutes = "0" + Math.floor(time / 60);
var seconds = "0" + (time - minutes * 60);
return minutes.substr(-2) + ":" + seconds.substr(-2);

Güzel ve kısa


9

ES6 kullanarak bir astarı temizleme


const secondsToMinutes = seconds => Math.floor(seconds / 60) + ':' + ('0' + Math.floor(seconds % 60)).slice(-2);

6

Bir astar (saatlerle çalışmaz):

 function sectostr(time) {
    return ~~(time / 60) + ":" + (time % 60 < 10 ? "0" : "") + time % 60;
 }

4

Saniye a sa: mm: ss

var hours = Math.floor(time / 3600);
time -= hours * 3600;

var minutes = Math.floor(time / 60);
time -= minutes * 60;

var seconds = parseInt(time % 60, 10);

console.log(hours + ':' + (minutes < 10 ? '0' + minutes : minutes) + ':' + (seconds < 10 ? '0' + seconds : seconds));

Birisi minutes < 10 ? '0' + minutes : minutesbenim için sadece temel js bilgisini varsayarak açıklayabilir mi?
Zediiiii

Dakikalar tek basamaklıysa (<10) baştaki sıfırı başa basmaz.
kayz1

Bu yardımcı olur! "?" js'deki üçlü operatördü.
Zediiiii

4

Aşağıdaki fonksiyon Gün, Saat, Dakika, saniye elde etmenize yardımcı olacaktır.

toDDHHMMSS(inputSeconds){
        const Days = Math.floor( inputSeconds / (60 * 60 * 24) );
        const Hour = Math.floor((inputSeconds % (60 * 60 * 24)) / (60 * 60));
        const Minutes = Math.floor(((inputSeconds % (60 * 60 * 24)) % (60 * 60)) / 60 );
        const Seconds = Math.floor(((inputSeconds % (60 * 60 * 24)) % (60 * 60)) % 60 );
        let ddhhmmss  = '';
        if (Days > 0){
            ddhhmmss += Days + ' Day ';
        }
        if (Hour > 0){
            ddhhmmss += Hour + ' Hour ';
        }

        if (Minutes > 0){
            ddhhmmss += Minutes + ' Minutes ';
        }

        if (Seconds > 0){
            ddhhmmss += Seconds + ' Seconds ';
        }
        return ddhhmmss;
    }
alert( toDDHHMMSS(2000));

Bunu beğendim. Değiştim if (Days > 0){ ddhhmmss += Days + ' Day '; }için if (Days > 0) {ddhhmmss += Days === 1 ? Days + ' Day ' : Days + ' Days '};söylenecek 1 Day, 2 Days, 3 Daysvb başkaları için de yapılabilir Benzer.
Ste

4

Tüm bunlardan sonra, başka bir basit çözüm:

const time = new Date(null);
time.setSeconds(7530);
console.log(time.getHours(), time.getMinutes(), time.getSeconds());

1
Olması gerektiği zaman time.setSeconds(1);iadeler kullanmak . 1 0 10 0 1
Ste

3

Bunun için başka ama çok daha zarif bir çözüm aşağıdaki gibidir:

/**
 * Convert number secs to display time
 *
 * 65 input becomes 01:05.
 *
 * @param Number inputSeconds Seconds input.
 */
export const toMMSS = inputSeconds => {
    const secs = parseInt( inputSeconds, 10 );
    let minutes = Math.floor( secs / 60 );
    let seconds = secs - minutes * 60;

    if ( 10 > minutes ) {
        minutes = '0' + minutes;
    }
    if ( 10 > seconds ) {
        seconds = '0' + seconds;
    }

    // Return display.
    return minutes + ':' + seconds;
};

3

Eğer kullanıyorsanız Moment.js o zaman yerleşik orada kullanabilirsiniz Durationnesne

const duration = moment.duration(4825, 'seconds');

const h = duration.hours(); // 1
const m = duration.minutes(); // 20
const s = duration.seconds(); // 25

3

2020 GÜNCELLEME

Temel matematik ve basit javascript kullanarak bu sadece birkaç satır satırda yapılabilir.

Örnek - dönüştürme 7735 secondsiçin HH:MM:SS.


MATEMATİK:

Hesaplamalar şunları kullanır:

  1. Math.floor()- https://developer.mozilla.org/tr-TR/docs/Web/JavaScript/Reference/Global_Objects/Math/floor

Math.floor()Fonksiyonu daha az büyük tam sayıyı döndüren veya belirli bir sayıya eşittir.

  1. %aritmetik işleç (Kalan) - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Remainder

Kalan operatör, bir işlenen ikinci bir işlenene bölündüğünde kalan kalanı döndürür. Her zaman temettü işareti alır.

Aşağıdaki kodu inceleyin. Saniye, 3600saat ve dakika sayısını hesaplamak için bölünür ; bu, dakika ve saniye sayısını hesaplamak için kullanılır.

HOURS => 7735 / 3600 = 2 remainder 535

MINUTES => 535 / 60 = 8 remainder 55

SECONDS => 55


ÖNCÜ SIFIRLAR:

- Birçok cevaplar burada başında sıfır düzgün bir şekilde saat, dakika ve saniye gösteri numarasına karmaşık yöntemleri kullanın 45, 04vb Bu kullanılarak yapılabilir padStart(). Bu, dizeler için çalışır, böylece sayı kullanılarak dizeye dönüştürülmelidir toString().

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart

padStart()Elde edilen dizi verilen uzunluğuna gelene kadar yöntemi (gerekirse birden çok kez,) başka bir dize mevcut dize doldurur. Doldurma, geçerli dizenin başından itibaren uygulanır.


KODU:

function secondsToTime(e){
    var h = Math.floor(e / 3600).toString().padStart(2,'0'),
        m = Math.floor(e % 3600 / 60).toString().padStart(2,'0'),
        s = Math.floor(e % 60).toString().padStart(2,'0');
    
    return h + ':' + m + ':' + s;
}

console.log(secondsToTime(7735));  //02:08:55

/*
secondsToTime(SECONDS) => HH:MM:SS 

secondsToTime(8)       => 00:00:08 
secondsToTime(68)      => 00:01:08
secondsToTime(1768)    => 00:29:28
secondsToTime(3600)    => 01:00:00
secondsToTime(5296)    => 01:28:16
secondsToTime(7735)    => 02:08:55
secondsToTime(45296)   => 12:34:56
secondsToTime(145296)  => 40:21:36
secondsToTime(1145296) => 318:08:16
*/


2

Sıfır eklemek için, örneğin kullanabileceğiniz başka bir işleve sahip olmanız gerektiğini gerçekten görmüyorum

var mins=Math.floor(StrTime/60);
var secs=StrTime-mins * 60;
var hrs=Math.floor(StrTime / 3600);
RoundTime.innerHTML=(hrs>9?hrs:"0"+hrs) + ":" + (mins>9?mins:"0"+mins) + ":" + (secs>9?secs:"0"+secs);

Bu yüzden öncelikle koşullu ifadelerimiz var.

(condition? if true: if false) yani örnek saniye sadece saniyeler göstermek yerine 9'dan fazlaysa, önüne bir dize 0 ekleyin.


2

şunu deneyin: Saniye, HOURS, MIN ve SEC.

function convertTime(sec) {
    var hours = Math.floor(sec/3600);
    (hours >= 1) ? sec = sec - (hours*3600) : hours = '00';
    var min = Math.floor(sec/60);
    (min >= 1) ? sec = sec - (min*60) : min = '00';
    (sec < 1) ? sec='00' : void 0;

    (min.toString().length == 1) ? min = '0'+min : void 0;    
    (sec.toString().length == 1) ? sec = '0'+sec : void 0;    

    return hours+':'+min+':'+sec;
}

2

var seconds = 60;
var measuredTime = new Date(null);
measuredTime.setSeconds(seconds); // specify value of SECONDS
var Time = measuredTime.toISOString().substr(11, 8);
document.getElementById("id1").value = Time;
<div class="form-group">
  <label for="course" class="col-md-4">Time</label>
  <div class="col-md-8">
    <input type="text" class="form-control" id="id1" name="field">Min
  </div>
</div>


1

Dakika ve saniye bölümlerini izlemek için yeterli kod yaptınız.

Yapabileceğiniz şey, saat faktörünü şuraya eklemek:

var hrd = time % (60 * 60 * 60);
var hours = Math.floor(hrd / 60);

var mind = hrd % 60;
var minutes = Math.floor(mind / 60);

var secd = mind % 60;
var seconds = Math.ceil(secd);

var moreminutes = minutes + hours * 60

Bu size ihtiyacınız olanı da verecektir.


Saniyede "zaman" kullanarak bunu denedim ve işe yaramadı. Örneğin, 975 sn hrd = 975 anlamına gelir, yani saat 16'dır.
Spedge

1

Bunu yapmanın daha hızlı bir yolunu düşünüyordum.

var sec = parseInt(time);
var min=0;
while(sec>59){ sec-=60; min++;}

"Saati" dakikayı ve saniyeye dönüştürmek istiyorsak, örneğin:

// time = 75,3 sec
var sec = parseInt(time); //sec = 75
var min=0;
while(sec>59){ sec-=60; min++;} //sec = 15; min = 1

1

İki sentimi koy:

function convertSecondsToMinutesAndSeconds(seconds){
            var minutes;
            var seconds;
            minutes = Math.floor(seconds/60);
            seconds = seconds%60;

            return [minutes, seconds];
        }

Yani bu:

var minutesAndSeconds = convertSecondsToMinutesAndSeconds(101);

Aşağıdaki çıktıya sahip olacak:

[1,41];

Sonra şöyle yazdırabilirsiniz:

console.log('TIME : ' +  minutesSeconds[0] + ' minutes, ' + minutesSeconds[1] + ' seconds');

//TIME : 1 minutes, 41 seconds

1

strftime.js ( strftime github ) en iyi zaman formatlama kütüphanelerinden biridir. Son derece hafif - 30KB - ve etkilidir. Bunu kullanarak, çoğunlukla yerel Date sınıfına dayanarak, bir kod satırında saniyeleri kolayca zamana dönüştürebilirsiniz.

Yeni bir Tarih oluştururken, isteğe bağlı her bağımsız değişken aşağıdaki gibi konumlandırılır:

new Date(year, month, day, hours, minutes, seconds, milliseconds);

Dolayısıyla, tüm bağımsız değişkenleri saniyeye kadar sıfır olarak yeni bir Tarih başlatırsanız, şunları elde edersiniz:

var seconds = 150;
var date = new Date(0,0,0,0,0,seconds);
=> Sun Dec 31 1899 00:02:30 GMT-0500 (EST)

Oluşturulan tarihte görüldüğü gibi 150 saniyenin 2 dakika 30 saniye olduğunu görebilirsiniz. Sonra bir strftime formatı ("MM: SS" için "% M:% S") kullanarak dakika dizenizi çıkarır.

var mm_ss_str = strftime("%M:%S", date);
=> "02:30"

Bir satırda şöyle görünecektir:

var mm_ss_str = strftime('%M:%S', new Date(0,0,0,0,0,seconds));
=> "02:30"

Ayrıca bu, saniye sayısına bağlı olarak HH: MM: SS ve MM: SS'nin değiştirilebilir desteğini kullanmanıza olanak tanır. Örneğin:

# Less than an Hour (seconds < 3600)
var seconds = 2435;
strftime((seconds >= 3600 ? '%H:%M:%S' : '%M:%S'), new Date(0,0,0,0,0,seconds));
=> "40:35"

# More than an Hour (seconds >= 3600)
var seconds = 10050;
strftime((seconds >= 3600 ? '%H:%M:%S' : '%M:%S'), new Date(0,0,0,0,0,seconds));
=> "02:47:30"

Ve elbette, zaman dizesinin az çok semantik olmasını istiyorsanız, strftime yapmak istediğiniz herhangi bir formatı geçebilirsiniz.

var format = 'Honey, you said you\'d be read in %S seconds %M minutes ago!';
strftime(format, new Date(0,0,0,0,0,1210));
=> "Honey, you said you'd be read in 10 seconds 20 minutes ago!"

Bu yardımcı olur umarım.


1
export function TrainingTime(props) {
    const {train_time } = props;
    const hours = Math.floor(train_time/3600);
    const minutes = Math.floor((train_time-hours * 3600) / 60);
    const seconds = Math.floor((train_time%60));

    return `${hours} hrs  ${minutes} min  ${seconds} sec`;
}

2
Stack Overflow'a hoş geldiniz. @PhilRoggenbuck tarafından önerildiği gibi, bir açıklama yardımcı olacaktır. Daha fazla bilgi için stackoverflow.com/help/how-to-answer
Mikkel

0

Başka bir çözüm öneriyorum:

function formatTime(nbSeconds, hasHours) {
    var time = [],
        s = 1;
    var calc = nbSeconds;

    if (hasHours) {
        s = 3600;
        calc = calc / s;
        time.push(format(Math.floor(calc)));//hour
    }

    calc = ((calc - (time[time.length-1] || 0)) * s) / 60;
    time.push(format(Math.floor(calc)));//minute

    calc = (calc - (time[time.length-1])) * 60;
    time.push(format(Math.round(calc)));//second


    function format(n) {//it makes "0X"/"00"/"XX"
        return (("" + n) / 10).toFixed(1).replace(".", "");
    }

    //if (!hasHours) time.shift();//you can set only "min: sec"

    return time.join(":");
};
console.log(formatTime(3500));//58:20
console.log(formatTime(305));//05:05
console.log(formatTime(75609, true));//21:00:09
console.log(formatTime(0, true));//00:00:00


0

Birçok yönden çözüldüğünü biliyorum. Hız veya ad alanı kirliliğinin bir sorun olmadığı bir After Effects komut dosyası için bu işleve ihtiyacım vardı. Benzer bir şeye ihtiyacı olan biri için buraya bırakıyorum. Ayrıca bazı testler yazdım ve iyi çalıştım. İşte kod:

Number.prototype.asTime = function () {
    var hour = Math.floor(this / 3600),
        min = Math.floor((this - hour * 3600) / 60),
        sec = this - hour * 3600 - min * 60,
        hourStr, minStr, secStr;
    if(hour){
        hourStr = hour.toString(),
        minStr = min < 9 ? "0" + min.toString() : min.toString();
        secStr = sec < 9 ? "0" + sec.toString() : sec.toString();
        return hourStr + ":" + minStr + ":" + secStr + "hrs";
    }
    if(min){
        minStr = min.toString();
        secStr = sec < 9 ? "0" + sec.toString() : sec.toString();
        return  minStr + ":" + secStr + "min";
    }
    return sec.toString() + "sec";
}
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.