Bagaimana saya bisa mendapatkan cap waktu dalam JavaScript?
Sesuatu yang mirip dengan cap waktu Unix , yaitu, satu nomor yang mewakili waktu dan tanggal saat ini. Baik sebagai angka atau string.
Bagaimana saya bisa mendapatkan cap waktu dalam JavaScript?
Sesuatu yang mirip dengan cap waktu Unix , yaitu, satu nomor yang mewakili waktu dan tanggal saat ini. Baik sebagai angka atau string.
Jawaban:
Pendek & Manis:
Operator unary suka
plus
memicuvalueOf
metode padaDate
objek dan mengembalikan stempel waktu (tanpa perubahan apa pun).Detail:
Pada hampir semua browser saat ini, Anda dapat menggunakan
Date.now()
untuk mendapatkan cap waktu UTC dalam milidetik ; pengecualian untuk ini adalah IE8 dan sebelumnya (lihat tabel kompatibilitas ).Anda dapat dengan mudah membuat shim untuk ini, meskipun:
Untuk mendapatkan cap waktu dalam hitungan detik , Anda dapat menggunakan:
Atau Anda bisa menggunakan:
Yang seharusnya sedikit lebih cepat, tetapi juga kurang dapat dibaca ( lihat juga jawaban ini ).
Saya akan merekomendasikan menggunakan
Date.now()
(dengan kompatibilitas shim). Ini sedikit lebih baik karena lebih pendek & tidak membuatDate
objek baru . Namun, jika Anda tidak menginginkan shim & kompatibilitas maksimum, Anda bisa menggunakan metode "lama" untuk mendapatkan cap waktu dalam milidetik :Yang kemudian dapat Anda konversi menjadi detik seperti ini:
Dan Anda juga dapat menggunakan
valueOf
metode yang kami tunjukkan di atas:Stempel waktu dalam Milidetik
sumber
Date.now() / 1000 | 0
menderita masalah Tahun 2038 ?new Date('Jan 1, 2039') / 1000 | 0 == -2117514496
~~(Date.now() / 1000)
Date.now()
+new Data
pintar, itu tidak dapat dibaca oleh pengembang lainnya.Date.now()
lebih jelas dan memastikan semua orang tahu apa yang terjadi.Saya suka ini, karena kecil:
Saya juga suka ini, karena pendek dan kompatibel dengan browser modern, dan lebih dari 500 orang memberikan suara yang lebih baik:
sumber
new Date().getTime()
. Beruntung bagi saya, solusi yang lebih cepat sudah merupakan solusi yang terbaca!new Date().toString()
disebut.+
dilakukan operator untuk membuatnya keluar seperti tali?JavaScript bekerja dengan jumlah milidetik sejak zaman sedangkan sebagian besar bahasa lain bekerja dengan detik. Anda bisa bekerja dengan milidetik tetapi segera setelah Anda memberikan nilai untuk mengatakan PHP, fungsi-fungsi asli PHP mungkin akan gagal. Jadi untuk memastikan saya selalu menggunakan detik, bukan milidetik.
Ini akan memberi Anda cap waktu Unix (dalam detik):
Ini akan memberi Anda milidetik sejak zaman (bukan cap waktu Unix):
sumber
Unix timestamp
vsSeconds since the Epoch
. Bukankah keduanya seharusnya berarti hal yang sama?sumber
(Date.now||function(){return +new Date})();
Saya memberikan beberapa solusi dengan deskripsi dalam jawaban ini. Jangan ragu untuk bertanya jika ada yang tidak jelas
PS: sayangnya seseorang menggabungkan ini ke jawaban teratas tanpa memberi kredit.
Solusi cepat dan kotor:
Math.floor()
larutan:Beberapa alternatif kutu buku oleh Derek 朕 會 功夫 diambil dari komentar di bawah ini:
Polyfill untuk mulai
Date.now()
bekerja:Untuk membuatnya berfungsi di IE Anda bisa melakukan ini (Polyfill dari MDN ):
Jika Anda tidak peduli dengan tahun / hari dalam seminggu / waktu musim panas, Anda dapat menghapusnya dan menggunakannya setelah 2038:
Jika Anda hanya ingin mengetahui waktu relatif dari saat kode dijalankan terlebih dahulu, Anda dapat menggunakan sesuatu seperti ini:
Jika Anda menggunakan jQuery, Anda dapat menggunakan
$.now()
seperti yang dijelaskan dalam jQuery's Docs yang membuat polyfill menjadi usang karena secara$.now()
internal melakukan hal yang sama:(new Date).getTime()
Jika Anda hanya senang dengan versi jQuery, pertimbangkan untuk memutakhirkan jawaban ini karena saya sendiri tidak menemukannya.
Sekarang penjelasan kecil tentang apa yang
|0
dilakukan:Dengan menyediakan
|
, Anda memberi tahu penerjemah untuk melakukan operasi biner ATAU. Operasi bit memerlukan angka absolut yang mengubah hasil desimal dariDate.now() / 1000
menjadi bilangan bulat.Selama konversi itu, desimal dihapus, menghasilkan hasil yang sama seperti menggunakan
Math.floor()
tetapi menggunakan lebih sedikit kode.Untuk informasi lebih lanjut tentang
Date.now
ikuti tautan ini:Date.now()
@ MDNsumber
Date.now()
referensi: developer.mozilla.org/en-US/docs/JavaScript/Reference/…new Date/1e3|0
.sumber
jQuery menyediakan metode sendiri untuk mendapatkan cap waktu:
(Selain itu hanya mengimplementasikan
(new Date).getTime()
ekspresi)REF: http://api.jquery.com/jQuery.now/
sumber
parseInt
, karena nilai yang dihasilkan akan selalu aNumber
.sumber
+new Date
.. :)Date.now()
Selain opsi lain, jika Anda menginginkan ISO format tanggal, Anda dapat langsung mendapatkannya
sumber
new Date("2017-05-04T07:11:28.940Z") - new Date("2017-05-04T07:11:14.092Z")
Sekadar tambahan, inilah fungsi untuk mengembalikan string stempel waktu dalam Javascript. Contoh: 15:06:38 PM
sumber
Tanggal , objek asli dalam JavaScript adalah cara kami mendapatkan semua data tentang waktu.
Hanya berhati-hatilah dalam JavaScript stempel waktu tergantung pada perangkat komputer klien, jadi stempel waktu tidak 100% akurat. Untuk mendapatkan hasil terbaik, Anda harus mendapatkan cap waktu dari sisi server .
Bagaimanapun, cara yang saya sukai adalah menggunakan vanilla. Ini adalah cara yang umum untuk melakukannya dalam JavaScript:
Dalam MDN disebutkan sebagai berikut:
Jika Anda menggunakan versi di bawah ES5,
Date.now();
tidak berfungsi dan Anda perlu menggunakan:sumber
Satu yang belum saya lihat
Satu lagi yang belum saya lihat adalah
sumber
Date.now() /1000 |0
melakukan hal yang sama dan telah dijawab sebelumnyaMath.floor()
ke dalamnya tetapi hanya untuk menjelaskan bahwa ia memiliki efek yang sama dengan|0
. aku tidak ingin melukaimu atau apapun. Saya hanya ingin memberi tahu Anda bahwa jawaban Anda dalam beberapa cara sudah ada. dengan melihat semua jawaban yang diberikan ada beberapa yang memperhatikan lantai dalam beberapa cara._.now()
sedikit berlebihan. Saya akan merekomendasikan hanya mengimpor fungsionalitas Lodash yang perlu Anda gunakan (dalam hal ini, _.sekarang () di NPM ), tetapi bahkan mereka telah mencabut paket mereka demi hanya menggunakanDate.now()
.The
Date.getTime()
Metode dapat digunakan dengan sedikit tweak:Bagi hasil dengan 1000 untuk mendapatkan cap waktu Unix,
floor
jika perlu:The
Date.valueOf()
Metode secara fungsional setara denganDate.getTime()
, yang memungkinkan untuk menggunakan operator aritmatika pada tanggal objek untuk mencapai hasil yang identik. Menurut pendapat saya, pendekatan ini mempengaruhi keterbacaan.sumber
new Date().getTime() / 1000
()
setelahnew Date
dan.getTime()
karena itu/
akan tetap memasukkan objek Date ke angka.Kode
Math.floor(new Date().getTime() / 1000)
dapat disingkat menjadinew Date / 1E3 | 0
.Pertimbangkan untuk melewatkan
getTime()
doa langsung dan digunakan| 0
sebagai penggantiMath.floor()
fungsi. Ini juga baik untuk diingat1E3
adalah padanan yang lebih pendek untuk1000
(huruf besar E lebih disukai daripada huruf kecil untuk menunjukkan1E3
sebagai konstanta).Sebagai hasilnya, Anda mendapatkan yang berikut:
sumber
"Math.floor(new Date().getTime()/1000)".length == 37;
"new Date/1E3|0".length == 14;
37 -14 = 23 byte;Math.floor()
dengan|0
membuat kode ini "jelas dan dapat dimengerti". Jelaskan pada saya apa gunanya menyimpan 1 byte dengan mengganti1000
dengan1E3
. Ini konyol. Saya melihat kode yang buruk.Performa
Hari ini - 2020.04.23 Saya melakukan tes untuk solusi yang dipilih. Saya menguji pada MacOs High Sierra 10.13.6 di Chrome 81.0, Safari 13.1, Firefox 75.0
Kesimpulan
Date.now()
(E) tercepat di Chrome dan Safari dan tercepat kedua di Firefox dan ini mungkin pilihan terbaik untuk solusi lintas-browser cepatperformance.now()
(G), yang mengejutkan, lebih dari 100x lebih cepat daripada solusi lain di Firefox tetapi paling lambat di ChromeDetail
Hasil untuk chrome
Anda dapat melakukan tes pada mesin Anda DI SINI
Kode yang digunakan dalam tes disajikan dalam cuplikan di bawah ini
Tampilkan cuplikan kode
sumber
performance.now()
karena itu seharusnya yang paling akurat dalam hal cap.privacy.reduceTimerPrecision
yang membulatkan hasil ke milidetik terdekat. Ini juga diaktifkan secara default tetapi dapat dinonaktifkan. developer.mozilla.org/en-US/docs/Web/API/Performance/nowSaya sangat merekomendasikan menggunakan
moment.js
. Untuk mendapatkan jumlah milidetik sejak zaman UNIX, lakukanUntuk mendapatkan jumlah detik sejak zaman UNIX, lakukan
Anda juga dapat mengonversi waktu seperti:
Saya melakukan itu sepanjang waktu. Tidak ada pelesetan yang dimaksudkan.
Untuk digunakan
moment.js
di browser:Untuk detail lebih lanjut, termasuk cara-cara lain untuk menginstal dan menggunakan MomentJS, lihat dokumen mereka
sumber
Untuk cap waktu dengan resolusi mikrodetik, ada
performance.now
:Misalnya ini bisa menghasilkan
1436140826653.139
, sementaraDate.now
hanya memberi1436140826653
.sumber
Anda hanya bisa menggunakan
untuk mendapatkan cap waktu saat ini. Tidak perlu melakukan apa pun ekstra.
sumber
Berikut adalah fungsi sederhana untuk menghasilkan cap waktu dalam format: mm / dd / yy hh: mi: ss
sumber
(new (chain (-date) (to-i-s-o-string)))
.sumber
Browser apa pun yang tidak mendukung Date.now, Anda dapat menggunakan ini untuk mendapatkan waktu tanggal saat ini:
sumber
Date.now
benar-benar ada (dan fungsi), sebelum mencoba untuk memohon itu:currentTime = typeof Date.now === "function" ? Date.now() : +new Date()
.Yang ini punya solusi: yang mengubah cap unixtime menjadi tim di js coba ini
sumber
Saya belajar cara yang sangat keren untuk mengubah objek Date yang diberikan ke cap waktu Unix dari kode sumber JQuery Cookie tempo hari.
Ini sebuah contoh:
sumber
Jika ingin cara dasar untuk menghasilkan cap waktu di Node.js ini berfungsi dengan baik.
Tim kami menggunakan ini untuk memecahkan cache di lingkungan localhost. Outputnya adalah di
/dist/css/global.css?v=245521377
mana245521377
cap waktu dihasilkan olehhrtime()
.Semoga ini bisa membantu, metode di atas dapat bekerja juga, tetapi saya menemukan ini menjadi pendekatan paling sederhana untuk kebutuhan kita di Node.js.
sumber
Ini sepertinya berhasil.
sumber
Jika ini untuk tujuan logging, Anda dapat menggunakan ISOString
new Date().toISOString()
sumber
Untuk pengguna lodash dan garis bawah , gunakan
_.now
.sumber
Moment.js dapat mengabstraksi banyak rasa sakit dalam berurusan dengan Javascript Tanggal.
Lihat: http://momentjs.com/docs/#/displaying/unix-timestamp/
sumber
moment().valueOf()
. Lihat jawaban saya.Saat menulis ini, jawaban teratas adalah 9 tahun, dan banyak yang telah berubah sejak saat itu - paling tidak, kami memiliki dukungan universal untuk solusi non-hacky:
Jika Anda ingin benar-benar yakin bahwa ini tidak akan pecah di beberapa peramban (pra ie9) kuno, Anda dapat membatalkannya, seperti:
Ini akan mengembalikan milidetik sejak zaman, tentu saja, bukan detik.
Dokumentasi MDN pada Date.now
sumber
cara yang lebih sederhana:
sumber
event
asalnya. Anda perlu memberikan penjelasan yang lebih baik tentang cara Anda menyelesaikannya alih-alih Anda menulis jawaban. Silahkan!