Bagaimana Anda mendapatkan cap waktu dalam JavaScript?

4015

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.

pupeno
sumber
Bagaimana cara mendapatkan cap waktu 64bit di JS?
Alexander Mills
@AlexanderMills Karena JavaScript tidak mendukung bilangan bulat 64bit, Anda harus mendapatkan dua bilangan bulat 32-bit. Ajukan pertanyaan lain.
wizzwizz4

Jawaban:

4914

Pendek & Manis:

+ new Date()

Operator unary suka plusmemicu valueOfmetode pada Dateobjek 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 Dateobjek 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 valueOfmetode 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());

daveb
sumber
11
Pengecualian penting lainnya adalah node.js. Saya datang ke sini dari Google dan ingin melakukan hal yang sama di simpul
Milan Babuškov
57
Tidak akan Date.now() / 1000 | 0menderita masalah Tahun 2038 ? new Date('Jan 1, 2039') / 1000 | 0 == -2117514496
gengkev
3
atau bahkan, tanpa menggunakan Math.floor ..~~(Date.now() / 1000)
Matej
14
@ MilanBabuškov tetapi node.js mendukungDate.now()
OrangeDog
51
Meskipun +new Datapintar, itu tidak dapat dibaca oleh pengembang lainnya. Date.now()lebih jelas dan memastikan semua orang tahu apa yang terjadi.
Harry Sadler
514

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()
xer0x
sumber
636
Opsi ini adalah ide yang buruk. Ini mudah diabaikan, terlihat seperti kesalahan ketik, dan pada kenyataannya mengandalkan efek samping bahasa. Saya melihat kode yang buruk.
inanutshellus
10
@Billy Seingat saya, saya menghitung cap waktu di dua solusi yang disarankan masing-masing 1M kali, dan menghitung rata-rata runtime. Saya menjalankannya di Firefox dan Chrome, dengan getTime menjadi lebih cepat di kedua browser. Yang mengatakan, bahkan jika itu (sedikit) lebih lambat saya akan memilih new Date().getTime(). Beruntung bagi saya, solusi yang lebih cepat sudah merupakan solusi yang terbaca!
inanutshellus
11
Setuju dengan @ FabrícioMatté. Perilaku operator unary mungkin tidak sederhana, tetapi jika Anda belum mengatasinya, jangan berharap dapat berfungsi secara efektif di banyak tim.
Jason T Featheringham
9
@Niklaus Itu karena Anda menggabungkannya ke string lain. Dalam hal ini, new Date().toString()disebut.
kirb
7
karena penasaran apa yang +dilakukan operator untuk membuatnya keluar seperti tali?
zadubz
276

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();
Daithí
sumber
4
PHP seharusnya bekerja dengan baik dengan milidetik, karena ia menggunakannya dengan fungsi microtime ().
Nico Burns
5
Sementara microtime () hadir, sebagian besar fungsi terkait waktu di php mengharapkan cap waktu berada dalam detik dan bukan milidetik. Terlebih lagi bahwa microtime () mengembalikan float (jika Anda lulus true) di mana bagian desimal adalah pecahan dari detik (akurat ke mikrodetik), sedangkan newDate (). GetTime () mengembalikan int di mana ia hanya menghitung milidetik sejak zaman Sebagai contoh (php) jika Anda memanggil floor (microtime (true)) ini akan secara efektif sama dengan waktu panggilan () yang dalam detik dan bukan mikro atau milidetik. Membagi dengan 1000 seperti di atas adalah solusi termudah untuk ini.
gregghz
49
Alih-alih bulat, gunakan lantai. 700 ms masih belum utuh
Anagmate
Unix timestampvs Seconds since the Epoch. Bukankah keduanya seharusnya berarti hal yang sama?
Mudiaga Ejenavi
147
var time = Date.now || function() {
  return +new Date;
};

time();
Staale
sumber
6
Kenapa || operator? Apakah Date.now () tidak tersedia di semua browser?
Chris Noe
67
Date.now () berasal dari JavaScript 1.5, dan tidak didukung pada IE 8.
Søren Løvborg
9
Mesin yang belum diperbarui untuk mendukung metode Date.now dapat mengatasi ketidakhadirannya menggunakan shim berikut: if (! Date.now) {Date.now = berfungsi sekarang () {return + (Tanggal baru); }; }
Per Quested Aronsson
atau(Date.now||function(){return +new Date})();
130

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 |0sihir. Gunakan Math.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 |0dilakukan:

Dengan menyediakan |, Anda memberi tahu penerjemah untuk melakukan operasi biner ATAU. Operasi bit memerlukan angka absolut yang mengubah hasil desimal dari Date.now() / 1000menjadi 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.nowikuti tautan ini: Date.now()@ MDN

GottZ
sumber
12
| 0 mirip dengan Math.floor () karena ini adalah operasi bit (yang tidak bekerja dengan float). biasanya bahkan lebih cepat daripada Math.floor () karena itu bukan panggilan fungsi, itu adalah operator javascript asli.
GottZ
8
Date.now()referensi: developer.mozilla.org/en-US/docs/JavaScript/Reference/…
Web_Designer
@ Christophe mengapa Anda berpikir begitu? karena perbaikan IE? kecuali bagian yang cukup sederhana dan dapat disesuaikan menurut saya.
GottZ
5
polyfill / shims tidak rumit. Mereka adalah hasil dari keharusan mendukung 9 versi browser yang berbeda dan industri memutuskan untuk memilih standar mana yang mereka adopsi dan mana yang mereka buat.
rlemon
8
Untuk referensi yang paling ringkas yang bisa Anda dapatkan adalah new Date/1e3|0.
Derek 朕 會 功夫
88
var timestamp = Number(new Date()); // current time as number
aemkei
sumber
61

jQuery menyediakan metode sendiri untuk mendapatkan cap waktu:

var timestamp = $.now();

(Selain itu hanya mengimplementasikan (new Date).getTime()ekspresi)

REF: http://api.jquery.com/jQuery.now/

Penglihatan
sumber
2
jQuery juga akan menangani masalah kompatibilitas lintas browser dengan JavaScript API yang berbeda.
Henry Heleine
4
@Visio Saya mencari cara untuk membuat cap waktu di Node.js. Saya menemukan pertanyaan javascript di stackoverflow dan saya mendapatkan jawaban di jQuery, yang tidak membantu. Javascript dan jQuery adalah dua hal. Jika kami memberikan jawaban untuk setiap kerangka kerja javascript di luar sana, kami mungkin memiliki jumlah jawaban yang tak terbatas, yang bertentangan dengan filosofi Q / A dalam stackoverflow. Juga: i.stack.imgur.com/Ledgt.gif : D
Pierre Arlaud
5
@Visio Siapa bilang javascript perlu digunakan di browser?
Pierre Arlaud
5
@PierreArlaud Dan siapa yang mengatakan bahwa pertanyaan ini hanya tentang NodeJS?
VisioN
2
@ KingRider Tidak perlu di parseInt, karena nilai yang dihasilkan akan selalu a Number.
VisioN
46

console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch

Tom Viner
sumber
4
Ini sama dengan +new Date.. :)
19h
8
lakukan sajaDate.now()
Orlando
@Orlando lihat jawaban lain, masalah sekarang () adalah dukungan browser
Christophe
@Christophe hanya melakukan polyfill sederhana, developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Orlando
4
@Orlando tepatnya, jangan hanya melakukan Date.now ()
Christophe
43

Selain opsi lain, jika Anda menginginkan ISO format tanggal, Anda dapat langsung mendapatkannya

console.log(new Date().toISOString());

Joaquinglezsantos
sumber
Itu tidak mengembalikan bilangan bulat dengan pertanyaan yang ditanyakan!
alexventuraio
@AlexVentura dengan string dateformat ISO Anda dapat membuat instance objek tanggal dan mengurangi di antara mereka. Sebagai contoh:new Date("2017-05-04T07:11:28.940Z") - new Date("2017-05-04T07:11:14.092Z")
Joaquinglezsantos
41

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;
}
cinta hidup
sumber
11
OP bertanya tentang cap waktu bilangan bulat; ini adalah representasi string dari waktu.
Brad Koch
3
"mirip dengan cap waktu Unix, yaitu, satu nomor yang mewakili waktu saat ini"
Brad Koch
Saya memiliki kode untuk menampilkan waktu tetapi beberapa bagian Australia menunjukkan tanggal penuh, skrip ini membantu saya menjabarkannya dan menampilkannya dengan benar. (+1 untuk itu)
Syfer
40

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();
Alireza
sumber
29

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();
Belldandu
sumber
1
Date.now() /1000 |0melakukan hal yang sama dan telah dijawab sebelumnya
GottZ
3
baik. Saya yakin diedit 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.
GottZ
Saya pikir mengimpor seluruh perpustakaan Lodash hanya untuk menggunakan _.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().
mgthomas99
27

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, floorjika 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.

Salman A
sumber
7
Anda tidak perlu tanda kurung:new Date().getTime() / 1000
Ry-
14
Anda tidak membutuhkannya, tetapi mereka membuat kode lebih mudah dibaca (IMHO). Soal rasa kurasa.
johndodo
Anda bahkan tidak perlu ()setelah new Datedan .getTime()karena itu /akan tetap memasukkan objek Date ke angka.
Derek 朕 會 功夫
25

Kode Math.floor(new Date().getTime() / 1000)dapat disingkat menjadinew Date / 1E3 | 0 .

Pertimbangkan untuk melewatkan getTime()doa langsung dan digunakan | 0sebagai pengganti Math.floor()fungsi. Ini juga baik untuk diingat 1E3adalah 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);

Valentin Podkamennyi
sumber
3
@destest "Math.floor(new Date().getTime()/1000)".length == 37; "new Date/1E3|0".length == 14; 37 -14 = 23 byte;
Valentin Podkamennyi
@MatthieuCharbonnier Apa sebenarnya yang tidak bisa dibaca? Tanda pembagian, 1E3, pipa atau nol? Silakan lihat cuplikan kode dalam jawaban saya di atas.
Valentin Podkamennyi
1
@Valentin Anda mengecilkan / menyulitkan kode sederhana untuk hampir tidak ada manfaatnya. Saya tidak melihat titik untuk melakukan itu. Kami tidak berada di Code Golf!
Matthieu Charbonnier
@ MatthieuCharbonnier, Tidak ada yang rumit, hanya sintaks dasar dan operator. Poin utamanya adalah menulis kode yang pendek, jelas dan mudah dimengerti.
Valentin Podkamennyi
2
@Valentin Tolong jelaskan saya bagaimana mengganti Math.floor()dengan |0membuat kode ini "jelas dan dapat dimengerti". Jelaskan pada saya apa gunanya menyimpan 1 byte dengan mengganti 1000dengan 1E3. Ini konyol. Saya melihat kode yang buruk.
Matthieu Charbonnier
24

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

  • Larutan Date.now() (E) tercepat di Chrome dan Safari dan tercepat kedua di Firefox dan ini mungkin pilihan terbaik untuk solusi lintas-browser cepat
  • Solusi performance.now()(G), yang mengejutkan, lebih dari 100x lebih cepat daripada solusi lain di Firefox tetapi paling lambat di Chrome
  • Solusi C, D, F cukup lambat di semua browser

masukkan deskripsi gambar di sini

Detail

Hasil untuk chrome

masukkan deskripsi gambar di sini

Anda dapat melakukan tes pada mesin Anda DI SINI

Kode yang digunakan dalam tes disajikan dalam cuplikan di bawah ini

Kamil Kiełczewski
sumber
Saya akan tertarik jika Anda menguji performance.now()karena itu seharusnya yang paling akurat dalam hal cap.
SamsonTheBrave
@SamsonTheBrave terima kasih atas komentar Anda - Saya memperbarui jawaban
Kamil Kiełczewski
Luar biasa, terima kasih atas pembaruan Anda! Saya perhatikan bahwa Anda melihat perbedaan dalam kinerja sekarang kecepatan di Firefox. Ini bisa merupakan hasil dari Firefox privacy.reduceTimerPrecisionyang membulatkan hasil ke milidetik terdekat. Ini juga diaktifkan secara default tetapi dapat dinonaktifkan. developer.mozilla.org/en-US/docs/Web/API/Performance/now
SamsonTheBrave
22

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.jsdi 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

FullStack
sumber
21

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.nowhanya memberi 1436140826653.

iter
sumber
21

Anda hanya bisa menggunakan

    var timestamp = new Date().getTime();
    console.log(timestamp);

untuk mendapatkan cap waktu saat ini. Tidak perlu melakukan apa pun ekstra.

Jitendra Pawar
sumber
20

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())));
}
deepakssn
sumber
10
@ b123400 - Berikut versi Lisp: (new (chain (-date) (to-i-s-o-string))).
Inaimathi
20

// 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>

blueberry0xff
sumber
16

Browser apa pun yang tidak mendukung Date.now, Anda dapat menggunakan ini untuk mendapatkan waktu tanggal saat ini:

currentTime = Date.now() || +new Date()
mr.boyfox
sumber
3
(Mengulang komentar saya) Kode Anda memiliki masalah: mengeksekusi metode Date.now daripada memeriksa dukungannya terlebih dahulu. Pada browser yang lebih lama, itu akan menyebabkan Date.now bukan kesalahan fungsi .
Salman A
Mungkin alternatif yang lebih baik akan menggunakan operator ternary untuk menegaskan bahwa Date.nowbenar-benar ada (dan fungsi), sebelum mencoba untuk memohon itu: currentTime = typeof Date.now === "function" ? Date.now() : +new Date().
mgthomas99
14

Yang ini punya solusi: yang mengubah cap unixtime menjadi tim di js coba ini

var a = new Date(UNIX_timestamp*1000);
var hour = a.getUTCHours();
var min = a.getUTCMinutes();
var sec = a.getUTCSeconds();
Anoop PS
sumber
14

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;
George
sumber
Saya baru saja akan menulis objek Date () baru. Anda dapat menghibur log (Date baru ()) dan kemudian membaca metode terkait di bawah objek Date () baru / fungsi
sg28
14

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=245521377mana 245521377cap 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.

Kevin Leary
sumber
13

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);
            }
};
Ronnie Royston
sumber
13

Jika ini untuk tujuan logging, Anda dapat menggunakan ISOString

new Date().toISOString()

"2019-05-18T20: 02: 36.694Z"

cenkarioz
sumber
12

Untuk pengguna lodash dan garis bawah , gunakan _.now.

var timestamp = _.now(); // in milliseconds
Muhammad Reda
sumber
10

Moment.js dapat mengabstraksi banyak rasa sakit dalam berurusan dengan Javascript Tanggal.

Lihat: http://momentjs.com/docs/#/displaying/unix-timestamp/

moment().unix();
Rimian
sumber
2
Perhatikan bahwa ini memberikan jumlah detik (bukan milidetik) sejak zaman UNIX. Jika Anda ingin milidetik, gunakan moment().valueOf(). Lihat jawaban saya.
FullStack
9

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.

Dokumentasi MDN pada Date.now

Olemak
sumber
8

cara yang lebih sederhana:

var timeStamp=event.timestamp || new Date().getTime();
Vicky Gonsalves
sumber
Tahu dari mana eventasalnya. Anda perlu memberikan penjelasan yang lebih baik tentang cara Anda menyelesaikannya alih-alih Anda menulis jawaban. Silahkan!
alexventuraio
Saya akan menulis objek Date () baru. Anda dapat menghibur log (Date baru ()) dan kemudian membaca metode terkait di bawah Date () objek / fungsi baru
sg28