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?
Jawaban:
Anda dapat menggunakannya sekarang seperti:
Cuplikan kerja:
Tampilkan cuplikan kode
sumber
Anda dapat melakukannya tanpa perpustakaan JS eksternal dengan bantuan metode JS Date seperti berikut:
sumber
new Date(1000 * seconds).toISOString().substr(11, 8)
..replace(/^[0:]+/, "")
setelahsubstr
untuk menghapus semua nol dan:
dari awal string.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.)
sumber
var myDate = new Date().toTimeString().replace(/.*(\d{2}:\d{2})(:\d{2}).*/, "$1");
replace
membingungkan. Kenapa tidak digunakannew Date(null, null, null, null, null, timeInSeconds).toTimeString().match(/\d{2}:\d{2}:\d{2}/)[0]
?new Date().toTimeString().split(" ")[0]
Saya merekomendasikan javascript biasa, menggunakan objek Date:
(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.)
sumber
date.getUTCHours()
dandate.getUTCMinutes()
.Pencarian Google menghasilkan hasil ini :
sumber
secondsToTime(119.9)
=>Object {h: 0, m: 1, s: 60}
. Untuk memperbaikinya, tambahkansecs = Math.round(secs);
di awal metode. Tentu saja, kami melihat bug ini selama demo ...Variasi pada suatu tema. Menangani detik satu digit sedikit berbeda
sumber
Inilah pendapat saya:
Hasil yang diharapkan:
sumber
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(':');
second
argumen. Saya menemukan versi saya lebih jelas walaupun sedikit lebih verbose.seconds: number
ketik anotasi, dalam es6?const s = Math.round(seconds % 60);
Saya suka jawaban pertama. Ada beberapa optimasi:
sumber data adalah suatu Angka. perhitungan tambahan tidak diperlukan.
banyak kelebihan komputasi
Kode hasil:
sumber
Number
itu benar karenaseconds
pada kenyataannya adalah angka. Anda harus mengonversi dari string sebelum menggunakan fungsi ini, yang merupakan hal yang benar untuk dilakukan!Menggunakan perpustakaan moment.js yang menakjubkan :
Ini memungkinkan Anda menentukan durasi apa pun, baik jam, menit, detik, pabrik, dan mengembalikan versi yang dapat dibaca manusia.
sumber
sumber
new Date().toString().split(" ")[4];
hasil
15:08:03
sumber
new Date(new Date().getTime() - startTime).toUTCString().split(" ")[4]
manastartTime
ditetapkan sebelumnya menggunakanstartTime = new Date().getTime();
. (Saya harus menggunakantoUTCString()
karena kalau tidak waktu satu jam keluar.)Cukup mudah,
sumber
hasil:
sumber
Saya paling suka jawaban Webjins, jadi saya memperpanjangnya untuk menampilkan hari dengan akhiran iklan, menjadikan tampilan bersyarat dan dimasukkan sebagai akhiran pada detik biasa:
mengembalikan "3d 16:32:12" atau "16:32:12" atau "32:12" atau "12s"
sumber
Saya menyukai jawaban Powtac, tetapi saya ingin menggunakannya di angular.js, jadi saya membuat filter menggunakan kodenya.
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
sumber
Saya pikir kinerja bijaksana sejauh ini yang tercepat:
sumber
Contohnya
sumber
Math.floor()
detik juga karena mereka mungkin diberikan dalam desimal. (Terjadi dengan saya.)Ini adalah versi lain, yang juga menangani beberapa hari:
sumber
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.sumber
Begini cara saya melakukannya. Tampaknya bekerja dengan cukup baik, dan sangat kompak. (Namun, ia menggunakan banyak operator ternary)
... dan untuk memformat string ...
sumber
Anda dapat menggunakan fungsi berikut untuk mengonversi waktu (dalam detik) ke
HH:MM:SS
format:Tanpa melewati pemisah, ia digunakan
:
sebagai pemisah (default):Jika Anda ingin menggunakan
-
sebagai pemisah, cukup berikan sebagai parameter kedua:Demo
Lihat juga Fiddle ini .
sumber
Ada metode baru untuk string di blok: padStart
Berikut ini contoh contoh penggunaan: Durasi YouTube dalam 4 baris JavaScript
sumber
Beginilah cara saya melakukannya
timeFromSecs (22341938) akan mengembalikan '258d 14j 5j 38s'
sumber
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).
// meniru format sisi server (.net, C #) seperti:
sumber
Anda dapat menggunakan Momement.js dengan plugin format durasi-saat :
Lihat juga Fiddle ini
sumber
di mana parameter lokal ("en", "de", dll.) adalah opsional
sumber
sumber
Berikut ini adalah one-liner yang diperbarui untuk 2019:
sumber
Date
objek.Berikut adalah solusi yang cukup sederhana yang membulatkan ke detik terdekat!
sumber
Ini yang saya tulis baru-baru ini untuk MM: SS. Ini tidak tepat untuk pertanyaan, tetapi format satu-liner yang berbeda.
Sunting: Ini ditambahkan untuk variasi, tetapi solusi terbaik di sini adalah https://stackoverflow.com/a/25279399/639679 di bawah ini.
sumber