Javascript detik hingga menit dan detik

170

Ini adalah masalah umum tetapi saya tidak yakin bagaimana menyelesaikannya. Kode di bawah ini berfungsi dengan baik.

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

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

Namun, ketika saya sampai 1 jam atau 3600 detik, ia mengembalikan 0 menit dan 0 detik. Bagaimana saya bisa menghindari ini sehingga mengembalikan semua menit?

Terima kasih

James Moore
sumber
Itu karena ketika waktu = 3600, 3600% 3600 selalu 0 ... jadi semuanya akan 0 sesuai dengan perhitungan Anda.
MSI

Jawaban:

338

Untuk mendapatkan jumlah menit penuh, bagi jumlah total detik dengan 60 (60 detik / menit):

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

Dan untuk mendapatkan detik yang tersisa, kalikan menit penuh dengan 60 dan kurangi dari total detik:

var seconds = time - minutes * 60;

Sekarang jika Anda juga ingin mendapatkan jam penuh juga, bagi jumlah detik total dengan 3600 (60 menit / jam · 60 detik / menit) pertama, lalu hitung detik yang tersisa:

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

Kemudian Anda menghitung menit penuh dan sisa detik.

Bonus:

Gunakan kode berikut untuk mencetak waktu dengan cantik (disarankan oleh Dru)

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);
Gumbo
sumber
57
Ini sedikit lebih bersih untuk mendapatkan detik yang tersisa dengan melakukan 'var seconds = time% 60'.
Edward D'Souza
11
@Radio menambahkan angka nol di depan menggunakan 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
Solusi ini tidak akan berfungsi untuk nilai negatif dari time. Jika Anda misalnya memasukkan -1 detik, Anda mendapatkan -1 menit dan 59 detik kembali ...
Pylinux
5
Apa arti memiliki yang negatif time? Logikanya perbedaan waktu selalu positif
mcont
4
Anda dapat menggunakan modulus untuk mendapatkan jumlah detik, itu lebih mudah dibaca menurut saya. var seconds = time % 60
JCM
106

Solusi mewah lain:

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

~~adalah singkatan untuk Math.floor, lihat tautan ini untuk info lebih lanjut

Coba online

Vishal
sumber
14
Apa artinya ~~?
mcont
9
Ini adalah pegangan tangan dasar untuk Math.floor, lihat tautan ini .
Lapin
Ini berfungsi dengan baik ..... :) Anda dapat membulatkan nilai seperti ini hrs = hrs.toFixed (0); mins = mins.toFixed (0); secs = secs.toFixed (0);
Abdul Khaliq
1
Terima kasih atas solusi ini! Saya menambahkan time = math.round(time)ke baris pertama untuk memberi saya detik bulat.
fotoflo
Ini adalah solusi yang lebih tepat. Sebagaimana dinyatakan di atas, solusi dengan suara terbanyak pada halaman ini menampilkan 180 detik sebagai 2m60s.
SongBox
71

Untuk orang-orang yang datang dengan harapan untuk solusi cepat yang sederhana dan dengan demikian singkat untuk memformat detik menjadi M:SS:

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

dilakukan ..
Fungsi menerima baik sebuah Number(disukai) atau suatu String(2 konversi 'hukuman' yang dapat Anda membagi dua dengan mengawali +dalam argumen fungsi panggilan untuk sseperti di: fmtMSS(+strSeconds)), yang mewakili detik bilangan bulat positif ssebagai argumen.

Contoh:

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

Kerusakan:

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

Catatan: Kisaran negatif dapat ditambahkan dengan menambahkan (0>s?(s=-s,'-'):'')+ke ekspresi pengembalian (sebenarnya, (0>s?(s=-s,'-'):0)+akan berfungsi juga).

GitaarLAB
sumber
Saya sarankan menambahkan Math.floor(s)baris terakhir untuk hasil yang lebih bersih. Tetap bekerja dengan baik, terima kasih!
Diego Fortes
@ PosessWithin: Tidak, Anda TIDAK boleh "menambahkan Math.floor (s) ke baris terakhir" (dari breakdown-snippet) karena berbagai alasan, terutama karena itu akan memperkenalkan bug untuk nilai antara 9dan 10tanpa modifikasi lebih lanjut; jika Anda memasukkan misalnya 69.25maka hasilnya 1:9bukan 1:09! Fungsi ini (yang saya tentukan secara spesifik bilangan bulat detik) dimaksudkan dan dibuat dengan penuh cinta sebagai alat pengolah dengan perfoma tinggi / 'mesin' (bukan untuk ukuran golf ninja) dan karena itu saya menganggapnya tidak sesuai untuk membebani mesin dengan verifikasi yang tidak dibutuhkan. / cleanup / filtering ...
GitaarLAB
... bekerja (seperti NaN, +/-Infinitydll.) dan opsi pembulatan yang harus dilakukan oleh programmer, sebelum memanggil fungsi, berdasarkan kebutuhan spesifik dan kemungkinan nilai input yang dapat ditemui aplikasi! Tentu saja Anda bebas untuk menambalnya jika pengetahuan domain Anda tentang nilai-nilai input yang diharapkan menentukan bahwa kasus penggunaan khusus Anda hampir selalu menerima nilai floating point dan pengujian kinerja menunjukkan bahwa aplikasi Anda. Dalam kasus Anda di mana Anda hanya ingin menambal lantai nilai-nilai positif Anda HARUS ....
GitaarLAB
... modifikasi (9<s?':':':0')ke (10>s?':0':':')(menambahkan 1 karakter tetapi 'mengorbankan' 5 dari 6 jalur-benar ke jalur salah) ATAU (10<=s?':':':0')(menambahkan 2 karakter tetapi mempertahankan 5 dari 6 jalur benar). Kemudian saya menyarankan untuk mengubah itu membuntuti akhir +suntuk +(s|0) bukan Math.floor(s) , untuk tidak merusak keindahan tidak perlu tekad dan panggilan Math.floor sementara masih beroperasi dengan benar selama seluruh 53bit +/-MAX_SAFE_INTEGERberbagai rentang bukan 'hanya' 32bit (unsigned) atau 31bit (ditandatangani)! Perhatikan bahwa ABS(s)magnetude dijamin lebih kecil dari 60, sehingga ditandatangani ...
GitaarLAB
... ditandatangani bitwise ATAU aman. Juga perhatikan bahwa modifikasi khusus ini tanpa lantai detik yang tersisa akan membuat fungsi menghasilkan fraksional detik tanpa membuntuti nol fraksional, tetapi akan sering memiliki lebih dari 3 digit frasa non-nol yang signifikan yang mungkin perlu Anda tangani juga. Akhirnya, ketika dikombinasikan dengan kode pra-perbaiki opsional untuk rentang negatif, modifikasi khusus ini akan secara efektif TRUNCate detik (bukan FLOORing mereka). PS: PFFT, whoever came up with just 512 char limit for any meaningful comment should be...
GitaarLAB
21

Anda juga dapat menggunakan objek Tanggal asli:

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

Tentu saja solusi ini hanya berfungsi untuk waktu Dalam waktu kurang dari 24 jam;)

hamczu
sumber
1
Tidak terpikir untuk membiarkan objek Date menangani pemformatan. Kurang fleksibel, tetapi jika Anda ingin jj: mm: dd (atau sebagian dari itu) ini hebat
MartinAnsty
Saya mencoba ini dengan 25 detik dan mengembalikan 01:00:25 yang setara dengan 1 jam dan 25 detik.
timstermatic
Ya, mungkin karena zona waktu Anda. Saya telah memperbarui solusi untuk menangani kasus ini.
hamczu
datedapat juga dibangun sebagaivar date = new Date(timeInSeconds * 1000)
Nuno André
20

Varian terbaik 2019

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

Илья Зеленько
sumber
hmmm, secondsadalah const. Anda tidak dapat menetapkan kembali.
ronapelbaum
@ronapelbaum argumen ini, tidak konstan, saya tidak mengerti apa yang Anda maksud
Илья Зеленько
@ronapelbaum jika Anda menetapkan detik alih-alih menjadikannya sebagai parameter yang harus Anda gunakan let, misalnya function display (state) { let seconds = state.seconds; ... }apakah darimana kesalahan Anda berasal?
retrovertigo
Param fungsi harus diperlakukan sebagai const. Saat Anda menggunakan, %=Anda akan menetapkan ulang param ini. Cukup gunakanseconds%60
ronapelbaum
16
function secondsToMinutes(time){
    return Math.floor(time / 60)+':'+Math.floor(time % 60);
}
El0din
sumber
3
Ini dapat ditingkatkan dengan nol bantalan detik: function secondsToMinutes(time){ return Math.floor(0 / 60)+':'+('0'+Math.floor(0 % 60)).slice(-2); }
Kus
bagus! @Kus terima kasih. Hanya Anda mungkin ingin mengganti keduanya 0dengan time, apakah saya benar?
mikey
2
@ Mikey oops! Ya,function secondsToMinutes(time){ return Math.floor(time / 60) + ':' + ('0' + Math.floor(time % 60)).slice(-2) }
Kus
12

Untuk menambahkan nol di depan, saya hanya akan melakukan:

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

Bagus dan pendek

Id Klijnsma
sumber
9

Bersihkan satu liner menggunakan ES6


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

Satu liner (tidak bekerja dengan jam):

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

Detik ke h: mm: dtk

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));
kayz1
sumber
Bisakah seseorang menjelaskan minutes < 10 ? '0' + minutes : minutesuntuk saya, dengan asumsi hanya pengetahuan dasar?
Zediiiii
Jika menit adalah digit tunggal (<10) tidak ada yang mengarah sebelumnya.
kayz1
Itu membantu! Saya tidak menyadari itu "?" adalah operator ternary di js.
Zediiiii
4

Fungsi Mengikuti akan membantu Anda mendapatkan Hari, Jam, Menit, detik

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));
sivamani s
sumber
Saya suka yang ini. Aku berubah if (Days > 0){ ddhhmmss += Days + ' Day '; }untuk if (Days > 0) {ddhhmmss += Days === 1 ? Days + ' Day ' : Days + ' Days '};mengatakan 1 Day, 2 Days, 3 Daysdll serupa dapat dilakukan untuk orang lain.
Ste
4

Setelah semua ini, solusi sederhana lain:

const time = new Date(null);
time.setSeconds(7530);
console.log(time.getHours(), time.getMinutes(), time.getSeconds());
pengguna2734839
sumber
1
Menggunakan time.setSeconds(1);pengembalian 1 0 1saat seharusnya 0 0 1.
Ste
3

Solusi lain yang lebih elegan untuk ini adalah sebagai berikut:

/**
 * 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;
};
Ahmad Awais
sumber
2

Untuk menambahkan nol, saya benar-benar tidak melihat perlunya memiliki fungsi lain yang lengkap di mana Anda dapat menggunakannya misalnya

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

Itu sebabnya kami memiliki pernyataan bersyarat di tempat pertama.

(kondisi? jika benar: jika salah) jadi jika contoh detik lebih dari 9 daripada hanya menunjukkan detik lain tambahkan string 0 sebelum itu.

Takdir
sumber
2

coba ini: Konversi Kedua ke JAM, MIN dan 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;
}
Sushil
sumber
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>

Anmol Devta
sumber
2

Jika Anda menggunakan Moment.js maka Anda dapat menggunakan Durationobjek bawaan di sana

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

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

UPDATE 2020

Menggunakan matematika dasar dan javascript sederhana ini dapat dilakukan hanya dalam beberapa baris kode.

CONTOH - Konversi 7735 secondske HH:MM:SS.


MATEMATIKA:

Perhitungan menggunakan:

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

The Math.floor()mengembalikan fungsi integer terbesar kurang dari atau sama dengan angka yang diberikan.

  1. %operator aritmatika (Sisa) - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Remainder

Operator sisanya mengembalikan sisa yang tersisa ketika satu operan dibagi dengan operan kedua. Itu selalu mengambil tanda dividen.

Lihat kode di bawah ini. Detik dibagi dengan 3600untuk mendapatkan jumlah jam dan sisanya, yang digunakan untuk menghitung jumlah menit dan detik.

HOURS => 7735 / 3600 = 2 remainder 535

MINUTES => 535 / 60 = 8 remainder 55

SECONDS => 55


ZEROS TERKEMUKA:

Banyak jawaban di sini menggunakan metode yang rumit untuk menunjukkan jumlah jam, menit dan detik dengan cara yang benar dengan memimpin nol - 45, 04dll. Ini dapat dilakukan dengan menggunakan padStart(). Ini berfungsi untuk string sehingga nomor harus dikonversi ke string menggunakan toString().

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

The padStart()Metode bantalan string saat ini dengan string lain (beberapa kali, jika diperlukan) sampai string yang dihasilkan mencapai panjang yang diberikan. Padding diterapkan sejak awal string saat ini.


KODE:

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

Jakub Muda
sumber
1

Anda telah melakukan cukup kode untuk melacak menit dan detik sebagian waktu.

Yang bisa Anda lakukan adalah menambahkan faktor jam di:

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

Ini akan memberi Anda apa yang Anda butuhkan juga.

Nevyn
sumber
Saya mencoba ini menggunakan "waktu" sebagai detik dan tidak berhasil. Sebagai contoh, 975 detik berarti hrd = 975, yang berarti jam adalah 16.
Spedge
1

Saya sedang memikirkan cara yang lebih cepat untuk menyelesaikan ini dan inilah yang saya hasilkan

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

Jika kita ingin mengonversi "waktu" menjadi menit dan detik, misalnya:

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

Masukkan dua sen saya di:

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

            return [minutes, seconds];
        }

Jadi ini :

var minutesAndSeconds = convertSecondsToMinutesAndSeconds(101);

Akan memiliki output berikut:

[1,41];

Maka Anda dapat mencetaknya seperti ini:

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

//TIME : 1 minutes, 41 seconds
thatOneGuy
sumber
1

strftime.js ( strftime github ) adalah salah satu pustaka pemformatan waktu terbaik. Ini sangat ringan - 30KB - dan efektif. Dengan menggunakannya, Anda dapat mengkonversi detik menjadi waktu dengan mudah dalam satu baris kode, sebagian besar mengandalkan kelas Date asli.

Saat membuat Tanggal baru, setiap argumen opsional ditempatkan sebagai berikut:

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

Jadi, jika Anda menginisialisasi Tanggal baru dengan semua argumen sebagai nol hingga detik, Anda akan mendapatkan:

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

Anda dapat melihat bahwa 150 detik adalah 2 menit dan 30 detik, seperti yang terlihat pada tanggal dibuat. Kemudian menggunakan format strftime ("% M:% S" untuk "MM: SS"), itu akan menampilkan string menit Anda.

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

Dalam satu baris, itu akan terlihat seperti:

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

Plus ini akan memungkinkan Anda untuk saling mendukung HH: MM: SS dan MM: SS berdasarkan jumlah detik. Sebagai contoh:

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

Dan tentu saja, Anda dapat dengan mudah melewatkan format apa pun yang ingin Anda habiskan jika Anda ingin string waktu menjadi lebih atau kurang semantik.

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

Semoga ini membantu.

Sebastian Scholl
sumber
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`;
}
Abdul Rehman
sumber
2
Selamat datang di Stack Overflow. Seperti yang disarankan oleh @PhilRoggenbuck, sebuah penjelasan akan membantu. Untuk info lebih lanjut baca stackoverflow.com/help/how-to-answer
Mikkel
0

Saya menyarankan solusi lain:

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

Sherali Turdiyev
sumber
0

Saya tahu ini telah diselesaikan dengan banyak cara. Saya membutuhkan fungsi ini untuk skrip After Effects, di mana kecepatan atau polusi namespace tidak menjadi masalah. Saya menjatuhkannya di sini untuk seseorang yang membutuhkan sesuatu yang serupa. Saya juga menulis beberapa tes dan bekerja dengan baik. Jadi, inilah kodenya:

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";
}
vladblindu
sumber