Saya tahu saya bisa melakukan apa saja dan beberapa lagi melibatkan Tanggal dengan momen. Tetapi memalukan, saya mengalami kesulitan mencoba melakukan sesuatu yang tampaknya sederhana: mendapatkan perbedaan antara 2 kali.
Contoh:
var now = "04/09/2013 15:00:00";
var then = "04/09/2013 14:20:30";
//expected result:
"00:39:30"
apa yang saya coba:
var now = moment("04/09/2013 15:00:00");
var then = moment("04/09/2013 14:20:30");
console.log(moment(moment.duration(now.diff(then))).format("hh:mm:ss"))
//outputs 10:39:30
Saya tidak mengerti apa itu "10" di sana. Saya tinggal di Brazil, jadi kami utc-0300 jika itu relevan.
Hasilnya moment.duration(now.diff(then))
adalah durasi dengan nilai internal yang benar:
days: 0
hours: 0
milliseconds: 0
minutes: 39
months: 0
seconds: 30
years: 0
Jadi, saya kira pertanyaan saya adalah: bagaimana cara mengubah Durasi sejenak ke interval waktu? Saya yakin bisa menggunakannya
duration.get("hours") +":"+ duration.get("minutes") +:+ duration.get("seconds")
tetapi saya merasa ada sesuatu yang lebih elegan yang benar-benar hilang.
pembaruan
tampak lebih dekat, dalam contoh di atas now
adalah:
Tue Apr 09 2013 15:00:00 GMT-0300 (E. South America Standard Time)…}
dan moment(moment.duration(now.diff(then)))
adalah:
Wed Dec 31 1969 22:39:30 GMT-0200 (E. South America Daylight Time)…}
Saya tidak yakin mengapa nilai kedua ada di Siang Hari (-0200) ... tapi saya yakin saya tidak suka tanggal :(
pembaruan 2
nah, nilainya adalah -0200 mungkin karena 31/12/1969 adalah tanggal di mana waktu siang hari digunakan ... jadi begitu.
Jawaban:
Pendekatan ini akan HANYA berlaku ketika total durasi kurang dari 24 jam:
Jika Anda memiliki 24 jam atau lebih, jam akan diatur ulang ke nol dengan pendekatan di atas, sehingga tidak ideal.
Jika Anda ingin mendapatkan respons yang valid untuk durasi 24 jam atau lebih, maka Anda harus melakukan sesuatu seperti ini:
Perhatikan bahwa saya menggunakan waktu utc sebagai jalan pintas. Anda dapat menarik keluar
d.minutes()
dand.seconds()
secara terpisah, tetapi Anda juga harus zeropad.Ini diperlukan karena kemampuan untuk
duration
mengajukan keberatan saat ini tidak ada di moment.js. Sudah diminta di sini . Namun, ada plugin pihak ketiga yang disebut format saat-durasi- yang khusus untuk tujuan ini:sumber
Masalah Anda adalah dalam meneruskan hasil moment.duration () kembali ke saat () sebelum memformatnya; ini menghasilkan saat () menafsirkannya sebagai waktu relatif ke zaman Unix.
Itu tidak memberi Anda persis format yang Anda cari, tetapi
moment.duration(now.diff(then)).humanize()
akan memberi Anda format yang bermanfaat seperti "40 menit". Jika Anda benar-benar tertarik pada pemformatan tertentu, Anda harus membuat sendiri string baru. Cara yang murah akan
[diff.asHours(), diff.minutes(), diff.seconds()].join(':')
mana
var diff = moment.duration(now.diff(then))
. Ini tidak memberi Anda bantalan nol pada nilai digit tunggal. Untuk itu, Anda mungkin ingin mempertimbangkan sesuatu seperti underscore.string - meskipun sepertinya jalan yang panjang untuk beberapa nol saja. :)sumber
asHours
sebagai gantinyahours
, dan melakukan desimal. Kalau tidak, itu akan memiliki masalah yang sama yang Anda tangkap dalam jawaban saya. :)[Math.floor(diff.asHours()), diff.minutes(), diff.seconds()].join(':')
untuk mendapatkan hasil yang diinginkan. tanpa desimal di bagian pertamaBekerja untukku
Lihat lebih banyak di http://momentjs.com/docs/#/displaying/difference/
sumber
Jika Anda ingin perbedaan dua cap waktu menjadi total hari, jam dan menit saja, bukan dalam bulan dan tahun.
beda mengandung 2 bulan, 23 hari, 23 jam dan 20 menit. Tetapi kami hanya membutuhkan hasil dalam hitungan hari, jam, dan menit sehingga solusi sederhana adalah:
Hasil akhir akan menjadi: 84 hari, 23 jam, 20 menit.
sumber
Saat Anda menelepon
diff
, moment.js menghitung perbedaan dalam milidetik. Jika milidetik dilewatkan keduration
, digunakan untuk menghitung durasi mana yang benar. Namun. ketika Anda melewatkan milidetik yang sama kemoment()
, itu menghitung tanggal milidetik dari (setelah) zaman / waktu unix yaitu 1 Januari 1970 (tengah malam UTC / GMT). Itu sebabnya Anda mendapatkan 1969 sebagai tahun bersama dengan jam yang salah.Jadi, saya pikir ini adalah bagaimana Anda harus melakukannya sejak moment.js tidak menawarkan
format
fungsi untuk durasi. Atau Anda bisa menulis pembungkus sederhana untuk membuatnya lebih mudah / lebih cantik.sumber
Ini seharusnya bekerja dengan baik.
sumber
Jika kita hanya menginginkan jj: mm: dd, kita dapat menggunakan fungsi seperti itu:
sumber
Gunakan ini,
sumber
Dari pada
Lebih baik dilakukan
sumber
Dalam ES8 menggunakan momen, sekarang dan mulai menjadi objek momen.
sumber
Naskah: mengikuti harus bekerja,
sumber
Saya membuat fungsi sederhana dengan naskah
untuk menghasilkan javascript https://www.typescriptlang.org/play/index.html
sumber
InTime = 06: 38, Outtime = 15: 40
sumber
INPUT BERBASIS WAKTU TANGGAL
KELUARAN
sumber
PERBEDAAN WAKTU EPOCH MENGGUNAKAN MOMENTJS :
Untuk Mendapatkan Perbedaan antara dua zaman:
Sintaksis:
moment.duration(moment(moment(date1).diff(moment(date2)))).asHours()
Perbedaan dalam Jam:
moment.duration(moment(moment(1590597744551).diff(moment(1590597909877)))).asHours()
Perbedaan dalam hitungan menit:
moment.duration(moment(moment(1590597744551).diff(moment(1590597909877)))).asMinutes().toFixed()
Catatan: Anda dapat menghapus
.toFixed()
jika Anda membutuhkan nilai yang tepat.Kode:
Lihat contoh kerja di sini: https://repl.it/repls/MoccasinDearDimension
sumber