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
javascript
James Moore
sumber
sumber
Jawaban:
Untuk mendapatkan jumlah menit penuh, bagi jumlah total detik dengan 60 (60 detik / menit):
Dan untuk mendapatkan detik yang tersisa, kalikan menit penuh dengan 60 dan kurangi dari total detik:
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:
Kemudian Anda menghitung menit penuh dan sisa detik.
Bonus:
Gunakan kode berikut untuk mencetak waktu dengan cantik (disarankan oleh Dru)
sumber
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);
time
. Jika Anda misalnya memasukkan -1 detik, Anda mendapatkan -1 menit dan 59 detik kembali ...time
? Logikanya perbedaan waktu selalu positifvar seconds = time % 60
Solusi mewah lain:
~~
adalah singkatan untukMath.floor
, lihat tautan ini untuk info lebih lanjutCoba online
sumber
~~
?Math.floor
, lihat tautan ini .time = math.round(time)
ke baris pertama untuk memberi saya detik bulat.Untuk orang-orang yang datang dengan harapan untuk solusi cepat yang sederhana dan dengan demikian singkat untuk memformat detik menjadi
M:SS
:dilakukan ..
Fungsi menerima baik sebuah
Number
(disukai) atau suatuString
(2 konversi 'hukuman' yang dapat Anda membagi dua dengan mengawali+
dalam argumen fungsi panggilan untuks
seperti di:fmtMSS(+strSeconds)
), yang mewakili detik bilangan bulat positifs
sebagai argumen.Contoh:
Kerusakan:
Catatan: Kisaran negatif dapat ditambahkan dengan menambahkan
(0>s?(s=-s,'-'):'')+
ke ekspresi pengembalian (sebenarnya,(0>s?(s=-s,'-'):0)+
akan berfungsi juga).sumber
Math.floor(s)
baris terakhir untuk hasil yang lebih bersih. Tetap bekerja dengan baik, terima kasih!9
dan10
tanpa modifikasi lebih lanjut; jika Anda memasukkan misalnya69.25
maka hasilnya1:9
bukan1: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 ...NaN
,+/-Infinity
dll.) 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 ....(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+s
untuk+(s|0)
bukanMath.floor(s)
, untuk tidak merusak keindahan tidak perlu tekad dan panggilanMath.floor
sementara masih beroperasi dengan benar selama seluruh 53bit+/-MAX_SAFE_INTEGER
berbagai rentang bukan 'hanya' 32bit (unsigned) atau 31bit (ditandatangani)! Perhatikan bahwaABS(s)
magnetude dijamin lebih kecil dari 60, sehingga ditandatangani ...PS: PFFT, whoever came up with just 512 char limit for any meaningful comment should be...
Anda juga dapat menggunakan objek Tanggal asli:
Tentu saja solusi ini hanya berfungsi untuk waktu Dalam waktu kurang dari 24 jam;)
sumber
date
dapat juga dibangun sebagaivar date = new Date(timeInSeconds * 1000)
Varian terbaik 2019
Format
hh:mm:ss
sumber
seconds
adalah const. Anda tidak dapat menetapkan kembali.let
, misalnyafunction display (state) { let seconds = state.seconds; ... }
apakah darimana kesalahan Anda berasal?%=
Anda akan menetapkan ulang param ini. Cukup gunakanseconds%60
sumber
function secondsToMinutes(time){ return Math.floor(0 / 60)+':'+('0'+Math.floor(0 % 60)).slice(-2); }
0
dengantime
, apakah saya benar?function secondsToMinutes(time){ return Math.floor(time / 60) + ':' + ('0' + Math.floor(time % 60)).slice(-2) }
Untuk menambahkan nol di depan, saya hanya akan melakukan:
Bagus dan pendek
sumber
Bersihkan satu liner menggunakan ES6
sumber
Satu liner (tidak bekerja dengan jam):
sumber
Detik ke h: mm: dtk
sumber
minutes < 10 ? '0' + minutes : minutes
untuk saya, dengan asumsi hanya pengetahuan dasar?Fungsi Mengikuti akan membantu Anda mendapatkan Hari, Jam, Menit, detik
sumber
if (Days > 0){ ddhhmmss += Days + ' Day '; }
untukif (Days > 0) {ddhhmmss += Days === 1 ? Days + ' Day ' : Days + ' Days '};
mengatakan1 Day
,2 Days
,3 Days
dll serupa dapat dilakukan untuk orang lain.Setelah semua ini, solusi sederhana lain:
sumber
time.setSeconds(1);
pengembalian1 0 1
saat seharusnya0 0 1
.Solusi lain yang lebih elegan untuk ini adalah sebagai berikut:
sumber
Untuk menambahkan nol, saya benar-benar tidak melihat perlunya memiliki fungsi lain yang lengkap di mana Anda dapat menggunakannya misalnya
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.
sumber
coba ini: Konversi Kedua ke JAM, MIN dan SEC.
sumber
sumber
Jika Anda menggunakan Moment.js maka Anda dapat menggunakan
Duration
objek bawaan di sanasumber
UPDATE 2020
Menggunakan matematika dasar dan javascript sederhana ini dapat dilakukan hanya dalam beberapa baris kode.
CONTOH - Konversi
7735 seconds
keHH:MM:SS
.MATEMATIKA:
Perhitungan menggunakan:
Math.floor()
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor%
operator aritmatika (Sisa) - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#RemainderLihat kode di bawah ini. Detik dibagi dengan
3600
untuk 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
,04
dll. Ini dapat dilakukan dengan menggunakanpadStart()
. Ini berfungsi untuk string sehingga nomor harus dikonversi ke string menggunakantoString()
.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
KODE:
sumber
Anda telah melakukan cukup kode untuk melacak menit dan detik sebagian waktu.
Yang bisa Anda lakukan adalah menambahkan faktor jam di:
Ini akan memberi Anda apa yang Anda butuhkan juga.
sumber
Saya sedang memikirkan cara yang lebih cepat untuk menyelesaikan ini dan inilah yang saya hasilkan
Jika kita ingin mengonversi "waktu" menjadi menit dan detik, misalnya:
sumber
Masukkan dua sen saya di:
Jadi ini :
Akan memiliki output berikut:
Maka Anda dapat mencetaknya seperti ini:
sumber
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:
Jadi, jika Anda menginisialisasi Tanggal baru dengan semua argumen sebagai nol hingga detik, Anda akan mendapatkan:
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.
Dalam satu baris, itu akan terlihat seperti:
Plus ini akan memungkinkan Anda untuk saling mendukung HH: MM: SS dan MM: SS berdasarkan jumlah detik. Sebagai contoh:
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.
Semoga ini membantu.
sumber
sumber
Saya menyarankan solusi lain:
sumber
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:
sumber