Bagaimana cara mengubah detik menjadi HH:mm:ss
?
Saat ini saya menggunakan fungsi di bawah ini
render: function (data){
return new Date(data*1000).toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");;
}
Ini berfungsi di chrome tetapi di firefox selama 12 detik saya mengerti, 01:00:12
saya ingin menggunakan moment.js untuk kompatibilitas lintas browser
Saya mencoba ini tetapi tidak berhasil
render: function (data){
return moment(data).format('HH:mm:ss');
}
Apa yang saya lakukan salah?
EDIT
Saya berhasil menemukan solusi tanpa moment.js yaitu sebagai berikut
return (new Date(data * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];
Masih penasaran bagaimana saya bisa melakukannya di moment.js
javascript
momentjs
QGA
sumber
sumber
Jawaban:
Dari posting ini saya akan mencoba ini untuk menghindari masalah lompatan
moment("2015-01-01").startOf('day') .seconds(s) .format('H:mm:ss');
Saya tidak menjalankan jsPerf, tapi menurut saya ini lebih cepat daripada membuat objek tanggal baru jutaan kali
function pad(num) { return ("0"+num).slice(-2); } function hhmmss(secs) { var minutes = Math.floor(secs / 60); secs = secs%60; var hours = Math.floor(minutes/60) minutes = minutes%60; return `${pad(hours)}:${pad(minutes)}:${pad(secs)}`; // return pad(hours)+":"+pad(minutes)+":"+pad(secs); for old browsers }
Tampilkan cuplikan kode
function pad(num) { return ("0"+num).slice(-2); } function hhmmss(secs) { var minutes = Math.floor(secs / 60); secs = secs%60; var hours = Math.floor(minutes/60) minutes = minutes%60; return `${pad(hours)}:${pad(minutes)}:${pad(secs)}`; // return pad(hours)+":"+pad(minutes)+":"+pad(secs); for old browsers } for (var i=60;i<=60*60*5;i++) { document.write(hhmmss(i)+'<br/>'); } /* function show(s) { var d = new Date(); var d1 = new Date(d.getTime()+s*1000); var hms = hhmmss(s); return (s+"s = "+ hms + " - "+ Math.floor((d1-d)/1000)+"\n"+d.toString().split("GMT")[0]+"\n"+d1.toString().split("GMT")[0]); } */
sumber
`${pad(hours)}:${pad(minutes)}:${pad(secs)}`
Ini mirip dengan jawaban mplungjan yang dirujuk dari postingan lain, tetapi lebih ringkas:
const secs = 456; const formatted = moment.utc(secs*1000).format('HH:mm:ss'); document.write(formatted);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
Itu menderita peringatan yang sama, misalnya jika detik melebihi satu hari (86400), Anda tidak akan mendapatkan apa yang Anda harapkan.
sumber
Anda dapat menggunakan plugin format durasi momen :
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>
Lihat juga Biola ini
Pembaruan: Untuk menghindari pemangkasan untuk nilai yang kurang dari 60 detik, gunakan
{ trim: false }
:var formatted = duration.format("hh:mm:ss", { trim: false }); // "00:00:05"
sumber
var seconds = 2000 ; // or "2000" seconds = parseInt(seconds) //because moment js dont know to handle number in string format var format = Math.floor(moment.duration(seconds,'seconds').asHours()) + ':' + moment.duration(seconds,'seconds').minutes() + ':' + moment.duration(seconds,'seconds').seconds();
sumber
Bagaimana cara menggunakan durasi moment.js dengan benar? | Gunakan moment.duration () dalam kode
Pertama, Anda perlu mengimpor
moment
danmoment-duration-format
.import moment from 'moment'; import 'moment-duration-format';
Kemudian, gunakan fungsi durasi. Mari kita terapkan contoh di atas: 28800 = 8 pagi.
moment.duration(28800, "seconds").format("h:mm a");
🎉Nah, Anda tidak memiliki kesalahan jenis di atas. 🤔Apakah Anda mendapatkan nilai yang benar pada jam 8 pagi? Tidak…, nilai yang Anda dapatkan adalah 8:00 a. Format Moment.js tidak berfungsi sebagaimana mestinya.
💡 Solusinya adalah mengubah detik menjadi milidetik dan menggunakan waktu UTC.
moment.utc(moment.duration(value, 'seconds').asMilliseconds()).format('h:mm a')
Baiklah kita bangun 8:00 sekarang. Jika Anda ingin 8 pagi dan bukan 8:00 untuk waktu integral, kita perlu melakukan RegExp
const time = moment.utc(moment.duration(value, 'seconds').asMilliseconds()).format('h:mm a'); time.replace(/:00/g, '')
sumber
Sampai 24 jam. Seperti yang
Duration.format
sudah usang, dengan [email protected]const seconds = 123; moment.utc(moment.duration(seconds,'seconds').as('milliseconds')).format('HH:mm:ss');
sumber
Solusi saya untuk mengubah detik (angka) ke format string (misalnya: 'mm: ss'):
const formattedSeconds = moment().startOf('day').seconds(S).format('mm:ss');
Tuliskan detik Anda, bukan 'S' sebagai contoh. Dan cukup gunakan 'formattedSeconds' di tempat yang Anda butuhkan.
sumber