Dapatkan waktu untuk tanggal tertentu menggunakan Javascript


Jawaban:


188

Anda dapat membuat sebuah Dateobjek, dan memanggilnya getTime:

new Date(2010, 6, 26).getTime() / 1000

13
Argumen bulan untuk konstruktor tanggal kurang memiliki sedikit konsistensi dan sebenarnya berbasis nol. Ini berarti 7 adalah Agustus, jadi Anda perlu mengurangi 1 :-)
Andy E

6
@Andy - itu adalah ide yang aneh untuk mengimbangi bulan dengan -1 sambil menyimpan sisanya, dan hal yang tepat yang dapat membuat pesawat luar angkasa menjadi gila, jika JavaScript pernah digunakan di sana :)
Anurag

7
Mungkin lebih baik untuk pergi: Tanggal baru ("2010-7-26"). GetTime () / 1000 sehingga Anda tidak perlu memikirkan offset.
Vincent McNabb

6
@ Vincent: new Date("2010-7-26")tidak akan mengurai di Internet Explorer. Tanggal konstruktor bergantung pada Date.parse () metode ketika string dilewatkan, yang merupakan implementasi tergantung di ECMA-262 3rd edition dan, sebagai akibat, terkenal tidak fleksibel di IE.
Andy E

Seseorang dapat meminimalkan kemungkinan kesalahan atau kesalahpahaman dalam menentukan zona waktu juga. Setidaknya versi aktual (Linux-) dari Firefox, Opera dan Chrome mendukung untuk membuat Tanggal JavaScript seperti Tanggal baru ("Jan 1, 1970 GMT + 00: 00, 00:01"); yang juga mengurangi kebingungan tentang format bulan yang benar.
Michael Besteck




1

Beberapa jawaban tidak menjelaskan efek samping variasi zona waktu untuk objek Tanggal JavaScript. Jadi, Anda harus mempertimbangkan jawaban ini jika ini menjadi perhatian Anda.

Metode 1: Tergantung zona waktu mesin

Secara default, JavaScript mengembalikan Tanggal dengan mempertimbangkan zona waktu mesin, jadi getTime()hasilnya bervariasi dari komputer ke komputer. Anda dapat memeriksa perilaku ini dengan berjalan:

new Date(1970, 0, 1, 0, 0, 0, 0).getTime()
    // Since 1970-01-01 is Epoch, you may expect ZERO
    // but in fact the result varies based on computer's timezone

Ini bukan masalah jika Anda benar-benar menginginkan waktu sejak Epoch mempertimbangkan zona waktu Anda. Jadi jika Anda ingin mendapatkan waktu sejak Epoch untuk Tanggal saat ini atau bahkan Tanggal tertentu berdasarkan zona waktu komputer , Anda bebas untuk terus menggunakan metode ini.

// Seconds since Epoch (Unix timestamp format)

new Date().getTime() / 1000             // local Date/Time since Epoch in seconds
new Date(2020, 11, 1).getTime() / 1000  // time since Epoch to 2020-12-01 00:00 (local timezone) in seconds

// Milliseconds since Epoch (used by some systems, eg. JavaScript itself)

new Date().getTime()                    // local Date/Time since Epoch in milliseconds
new Date(2020,  0, 2).getTime()         // time since Epoch to 2020-01-02 00:00 (local timezone) in milliseconds

// **Warning**: notice that MONTHS in JavaScript Dates starts in zero (0 = January, 11 = December)

Metode 2: Zona waktu mesin tidak tergantung

Namun, jika Anda ingin mendapatkan variasi dalam zona waktu dan mendapatkan waktu sejak Epoch untuk Tanggal tertentu dalam UTC (yaitu, zona waktu tidak tergantung), Anda perlu menggunakan Date.UTCmetode atau menggeser tanggal dari zona waktu Anda ke UTC:

Date.UTC(1970,  0, 1)
    // should be ZERO in any computer, since it is ZERO the difference from Epoch

    // Alternatively (if, for some reason, you do not want Date.UTC)
    const timezone_diff = new Date(1970, 0, 1).getTime()  // difference in milliseconds between your timezone and UTC
    (new Date(1970,  0, 1).getTime() - timezone_diff)
    // should be ZERO in any computer, since it is ZERO the difference from Epoch

Jadi, dengan menggunakan metode ini (atau, sebagai alternatif, mengurangkan selisihnya), hasilnya adalah:

// Seconds since Epoch (Unix timestamp format)

Date.UTC(2020,  0, 1) / 1000  // time since Epoch to 2020-01-01 00:00 UTC in seconds

    // Alternatively (if, for some reason, you do not want Date.UTC)
    const timezone_diff = new Date(1970, 0, 1).getTime()
    (new Date(2020,  0, 1).getTime() - timezone_diff) / 1000  // time since Epoch to 2020-01-01 00:00 UTC in seconds
    (new Date(2020, 11, 1).getTime() - timezone_diff) / 1000  // time since Epoch to 2020-12-01 00:00 UTC in seconds

// Milliseconds since Epoch (used by some systems, eg. JavaScript itself)

Date.UTC(2020,  0, 2)   // time since Epoch to 2020-01-02 00:00 UTC in milliseconds

    // Alternatively (if, for some reason, you do not want Date.UTC)
    const timezone_diff = new Date(1970, 0, 1).getTime()
    (new Date(2020,  0, 2).getTime() - timezone_diff)         // time since Epoch to 2020-01-02 00:00 UTC in milliseconds

// **Warning**: notice that MONTHS in JavaScript Dates starts in zero (0 = January, 11 = December)

IMO, kecuali Anda tahu apa yang Anda lakukan (lihat catatan di atas), Anda harus lebih memilih Metode 2 , karena ini tidak tergantung mesin.


Catatan akhir

Meskipun ada rekomendasi dalam jawaban ini, dan karena Date.UTCtidak berfungsi tanpa tanggal / waktu tertentu, Anda mungkin cenderung menggunakan pendekatan alternatif dan melakukan sesuatu seperti ini:

const timezone_diff = new Date(1970, 0, 1).getTime()
(new Date().getTime() - timezone_diff)  // <-- !!! new Date() without arguments
    // means "local Date/Time subtracted by timezone since Epoch" (?)

Ini tidak masuk akal dan mungkin SALAH (Anda mengubah tanggal). Berhati-hatilah untuk tidak melakukan ini. Jika Anda ingin mendapatkan waktu sejak Epoch dari tanggal DAN WAKTU saat ini , kemungkinan besar Anda baik-baik saja menggunakan Metode 1 .


1

Date.parse()metode mem-parsing representasi string dari tanggal, dan mengembalikan jumlah milidetik sejak itu January 1, 1970, 00:00:00 UTC.

const unixTimeZero = Date.parse('01 Jan 1970 00:00:00 GMT');
const javaScriptRelease = Date.parse('04 Dec 1995 00:12:00 GMT');

console.log(unixTimeZero);
// expected output: 0

console.log(javaScriptRelease);
// expected output: 818035920000

Jelajahi lebih lanjut di: Date.parse ()


0
Number(new Date(2010, 6, 26))

Cara kerjanya sama seperti di atas. Jika Anda membutuhkan detik jangan lupa/ 1000

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.