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:
+ new Date()
Operator unary suka plus
memicu valueOf
metode pada Date
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:
if (!Date.now) {
Date.now = function() { return new Date().getTime(); }
}
Untuk mendapatkan cap waktu dalam hitungan detik , Anda dapat menggunakan:
Math.floor(Date.now() / 1000)
Atau Anda bisa menggunakan:
Date.now() / 1000 | 0
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 membuat Date
objek baru . Namun, jika Anda tidak menginginkan shim & kompatibilitas maksimum, Anda bisa menggunakan metode "lama" untuk mendapatkan cap waktu dalam milidetik :
new Date().getTime()
Yang kemudian dapat Anda konversi menjadi detik seperti ini:
Math.round(new Date().getTime()/1000)
Dan Anda juga dapat menggunakan valueOf
metode yang kami tunjukkan di atas:
new Date().valueOf()
Stempel waktu dalam Milidetik
var timeStampInMs = window.performance && window.performance.now && window.performance.timing && window.performance.timing.navigationStart ? window.performance.now() + window.performance.timing.navigationStart : Date.now();
console.log(timeStampInMs, Date.now());
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:
+new Date
Saya juga suka ini, karena pendek dan kompatibel dengan browser modern, dan lebih dari 500 orang memberikan suara yang lebih baik:
Date.now()
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):
var unix = Math.round(+new Date()/1000);
Ini akan memberi Anda milidetik sejak zaman (bukan cap waktu Unix):
var milliseconds = new Date().getTime();
Unix timestamp
vs Seconds since the Epoch
. Bukankah keduanya seharusnya berarti hal yang sama?
var time = Date.now || function() {
return +new Date;
};
time();
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:
Date.now() /1000 |0
Peringatan : mungkin rusak pada 2038 dan mengembalikan angka negatif jika Anda melakukan
|0
sihir. GunakanMath.floor()
sebagai gantinya pada saat itu
Math.floor()
larutan:
Math.floor(Date.now() /1000);
Beberapa alternatif kutu buku oleh Derek 朕 會 功夫 diambil dari komentar di bawah ini:
new Date/1e3|0
Polyfill untuk mulai Date.now()
bekerja:
Untuk membuatnya berfungsi di IE Anda bisa melakukan ini (Polyfill dari MDN ):
if (!Date.now) {
Date.now = function now() {
return new Date().getTime();
};
}
Jika Anda tidak peduli dengan tahun / hari dalam seminggu / waktu musim panas, Anda dapat menghapusnya dan menggunakannya setelah 2038:
var now = (function () {
var year = new Date(new Date().getFullYear().toString()).getTime();
return function () {
return Date.now() - year
}
})();
Beberapa output bagaimana tampilannya:
new Date() Thu Oct 29 2015 08:46:30 GMT+0100 (Mitteleuropäische Zeit ) new Date(now()) Thu Oct 29 1970 09:46:30 GMT+0100 (Mitteleuropäische Zeit )
Tentu saja itu akan merusak waktu musim panas tetapi tergantung pada apa yang Anda bangun ini mungkin berguna bagi Anda jika Anda perlu melakukan operasi biner pada stempel waktu setelah int32 akan rusak pada tahun 2038.
Ini juga akan mengembalikan nilai negatif tetapi hanya jika pengguna PC yang Anda jalankan kode Anda mengubah jam PC mereka setidaknya ke 31 Desember tahun sebelumnya.
Jika Anda hanya ingin mengetahui waktu relatif dari saat kode dijalankan terlebih dahulu, Anda dapat menggunakan sesuatu seperti ini:
var relativeTime = (function () {
var start = Date.now();
return function () {
return Date.now() - start
}
})();
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 dari Date.now() / 1000
menjadi bilangan bulat.
Selama konversi itu, desimal dihapus, menghasilkan hasil yang sama seperti menggunakan Math.floor()
tetapi menggunakan lebih sedikit kode.
Berhati-hatilah: itu akan mengubah 64 bit ganda menjadi 32 bit integer. Ini akan mengakibatkan hilangnya informasi ketika berhadapan dengan angka yang sangat besar. Cap waktu akan pecah setelah 2038 karena 32 bit integer overflow.
Untuk informasi lebih lanjut tentang Date.now
ikuti tautan ini: Date.now()
@ MDN
Date.now()
referensi: developer.mozilla.org/en-US/docs/JavaScript/Reference/…
new Date/1e3|0
.
jQuery menyediakan metode sendiri untuk mendapatkan cap waktu:
var timestamp = $.now();
(Selain itu hanya mengimplementasikan (new Date).getTime()
ekspresi)
parseInt
, karena nilai yang dihasilkan akan selalu a Number
.
console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch
+new Date
.. :)
Date.now()
Selain opsi lain, jika Anda menginginkan ISO format tanggal, Anda dapat langsung mendapatkannya
console.log(new Date().toISOString());
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
function displayTime() {
var str = "";
var currentTime = new Date()
var hours = currentTime.getHours()
var minutes = currentTime.getMinutes()
var seconds = currentTime.getSeconds()
if (minutes < 10) {
minutes = "0" + minutes
}
if (seconds < 10) {
seconds = "0" + seconds
}
str += hours + ":" + minutes + ":" + seconds + " ";
if(hours > 11){
str += "PM"
} else {
str += "AM"
}
return str;
}
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:
Date.now(); //return 1495255666921
Dalam MDN disebutkan sebagai berikut:
Metode Date.now () mengembalikan jumlah milidetik yang berlalu sejak 1 Januari 1970 00:00:00 UTC.
Karena now () adalah metode statis Date, Anda selalu menggunakannya sebagai Date.now ().
Jika Anda menggunakan versi di bawah ES5, Date.now();
tidak berfungsi dan Anda perlu menggunakan:
new Date().getTime();
Satu yang belum saya lihat
Math.floor(Date.now() / 1000); // current time in seconds
Satu lagi yang belum saya lihat adalah
var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();
Date.now() /1000 |0
melakukan hal yang sama dan telah dijawab sebelumnya
Math.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 menggunakan Date.now()
.
The Date.getTime()
Metode dapat digunakan dengan sedikit tweak:
Nilai yang dikembalikan oleh metode getTime adalah jumlah milidetik sejak 1 Januari 1970 00:00:00 UTC.
Bagi hasil dengan 1000 untuk mendapatkan cap waktu Unix, floor
jika perlu:
(new Date).getTime() / 1000
The Date.valueOf()
Metode secara fungsional setara dengan Date.getTime()
, yang memungkinkan untuk menggunakan operator aritmatika pada tanggal objek untuk mencapai hasil yang identik. Menurut pendapat saya, pendekatan ini mempengaruhi keterbacaan.
new Date().getTime() / 1000
()
setelah new 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 pengganti Math.floor()
fungsi. Ini juga baik untuk diingat 1E3
adalah padanan yang lebih pendek untuk 1000
(huruf besar E lebih disukai daripada huruf kecil untuk menunjukkan1E3
sebagai konstanta).
Sebagai hasilnya, Anda mendapatkan yang berikut:
var ts = new Date / 1E3 | 0;
console.log(ts);
"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 mengganti 1000
dengan 1E3
. Ini konyol. Saya melihat kode yang buruk.
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
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 ChromeHasil untuk chrome
Anda dapat melakukan tes pada mesin Anda DI SINI
Kode yang digunakan dalam tes disajikan dalam cuplikan di bawah ini
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/now
Saya sangat merekomendasikan menggunakan moment.js
. Untuk mendapatkan jumlah milidetik sejak zaman UNIX, lakukan
moment().valueOf()
Untuk mendapatkan jumlah detik sejak zaman UNIX, lakukan
moment().unix()
Anda juga dapat mengonversi waktu seperti:
moment('2015-07-12 14:59:23', 'YYYY-MM-DD HH:mm:ss').valueOf()
Saya melakukan itu sepanjang waktu. Tidak ada pelesetan yang dimaksudkan.
Untuk digunakan moment.js
di browser:
<script src="moment.js"></script>
<script>
moment().valueOf();
</script>
Untuk detail lebih lanjut, termasuk cara-cara lain untuk menginstal dan menggunakan MomentJS, lihat dokumen mereka
Untuk cap waktu dengan resolusi mikrodetik, ada performance.now
:
function time() {
return performance.now() + performance.timing.navigationStart;
}
Misalnya ini bisa menghasilkan 1436140826653.139
, sementara Date.now
hanya memberi 1436140826653
.
Anda hanya bisa menggunakan
var timestamp = new Date().getTime();
console.log(timestamp);
untuk mendapatkan cap waktu saat ini. Tidak perlu melakukan apa pun ekstra.
Berikut adalah fungsi sederhana untuk menghasilkan cap waktu dalam format: mm / dd / yy hh: mi: ss
function getTimeStamp() {
var now = new Date();
return ((now.getMonth() + 1) + '/' +
(now.getDate()) + '/' +
now.getFullYear() + " " +
now.getHours() + ':' +
((now.getMinutes() < 10)
? ("0" + now.getMinutes())
: (now.getMinutes())) + ':' +
((now.getSeconds() < 10)
? ("0" + now.getSeconds())
: (now.getSeconds())));
}
(new (chain (-date) (to-i-s-o-string)))
.
// The Current Unix Timestamp
// 1443534720 seconds since Jan 01 1970. (UTC)
// seconds
console.log(Math.floor(new Date().valueOf() / 1000)); // 1443534720
console.log(Math.floor(Date.now() / 1000)); // 1443534720
console.log(Math.floor(new Date().getTime() / 1000)); // 1443534720
// milliseconds
console.log(Math.floor(new Date().valueOf())); // 1443534720087
console.log(Math.floor(Date.now())); // 1443534720087
console.log(Math.floor(new Date().getTime())); // 1443534720087
// jQuery
// seconds
console.log(Math.floor($.now() / 1000)); // 1443534720
// milliseconds
console.log($.now()); // 1443534720087
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Browser apa pun yang tidak mendukung Date.now, Anda dapat menggunakan ini untuk mendapatkan waktu tanggal saat ini:
currentTime = Date.now() || +new Date()
Date.now
benar-benar ada (dan fungsi), sebelum mencoba untuk memohon itu: currentTime = typeof Date.now === "function" ? Date.now() : +new Date()
.
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:
var date = new Date();
var timestamp = +date;
Jika ingin cara dasar untuk menghasilkan cap waktu di Node.js ini berfungsi dengan baik.
var time = process.hrtime();
var timestamp = Math.round( time[ 0 ] * 1e3 + time[ 1 ] / 1e6 );
Tim kami menggunakan ini untuk memecahkan cache di lingkungan localhost. Outputnya adalah di /dist/css/global.css?v=245521377
mana 245521377
cap waktu dihasilkan oleh hrtime()
.
Semoga ini bisa membantu, metode di atas dapat bekerja juga, tetapi saya menemukan ini menjadi pendekatan paling sederhana untuk kebutuhan kita di Node.js.
Ini sepertinya berhasil.
console.log(clock.now);
// returns 1444356078076
console.log(clock.format(clock.now));
//returns 10/8/2015 21:02:16
console.log(clock.format(clock.now + clock.add(10, 'minutes')));
//returns 10/8/2015 21:08:18
var clock = {
now:Date.now(),
add:function (qty, units) {
switch(units.toLowerCase()) {
case 'weeks' : val = qty * 1000 * 60 * 60 * 24 * 7; break;
case 'days' : val = qty * 1000 * 60 * 60 * 24; break;
case 'hours' : val = qty * 1000 * 60 * 60; break;
case 'minutes' : val = qty * 1000 * 60; break;
case 'seconds' : val = qty * 1000; break;
default : val = undefined; break;
}
return val;
},
format:function (timestamp){
var date = new Date(timestamp);
var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
var hours = date.getHours();
var minutes = "0" + date.getMinutes();
var seconds = "0" + date.getSeconds();
// Will display time in xx/xx/xxxx 00:00:00 format
return formattedTime = month + '/' +
day + '/' +
year + ' ' +
hours + ':' +
minutes.substr(-2) +
':' + seconds.substr(-2);
}
};
Untuk pengguna lodash dan garis bawah , gunakan _.now
.
var timestamp = _.now(); // in milliseconds
Moment.js dapat mengabstraksi banyak rasa sakit dalam berurusan dengan Javascript Tanggal.
Lihat: http://momentjs.com/docs/#/displaying/unix-timestamp/
moment().unix();
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:
Date.now()
Jika Anda ingin benar-benar yakin bahwa ini tidak akan pecah di beberapa peramban (pra ie9) kuno, Anda dapat membatalkannya, seperti:
const currentTimestamp = (!Date.now ? +new Date() : Date.now());
Ini akan mengembalikan milidetik sejak zaman, tentu saja, bukan detik.
cara yang lebih sederhana:
var timeStamp=event.timestamp || new Date().getTime();
event
asalnya. Anda perlu memberikan penjelasan yang lebih baik tentang cara Anda menyelesaikannya alih-alih Anda menulis jawaban. Silahkan!