Bagaimana cara mengubah tanggal menjadi cap waktu?

165

Saya ingin mengonversi tanggal ke stempel waktu, input saya adalah 26-02-2012. Saya menggunakan

new Date(myDate).getTime();

Dikatakan NaN .. Bisakah ada yang tahu bagaimana mengonversi ini?

selladurai
sumber
kemungkinan duplikat stackoverflow.com/questions/9343971/…
Bogdan Emil Mariesan
Anda mungkin ingin melihat perpustakaan date.js
rsbarro
1
Apakah Anda menggunakan Date(myDate).getTime()(apa yang Anda tandai sebagai kode), atau apakah kata "baru" sebelum itu dimaksudkan untuk menjadi bagian dari kode? Semakin banyak upaya yang Anda lakukan, semakin baik jawaban yang Anda dapatkan.
TJ Crowder
@rsbarro: Kecuali itu tampaknya tidak dipertahankan lagi (dan ada bug yang beredar). MomentJS tampaknya cukup bagus.
TJ Crowder
@TJCrowder Saya telah menggunakan date.js dan itu berfungsi untuk apa saya membutuhkannya, tapi Anda benar itu belum aktif aktif dalam beberapa waktu. Saya akan memeriksa momen. Terima kasih!
rsbarro

Jawaban:

203
var myDate = "26-02-2012";
myDate = myDate.split("-");
var newDate = myDate[1]+","+myDate[0]+","+myDate[2];
console.log(new Date(newDate).getTime());​

Memperbarui:

var myDate = "26-02-2012";
myDate = myDate.split("-");
var newDate = myDate[1]+"/"+myDate[0]+"/"+myDate[2];
console.log(new Date(newDate).getTime());

DEMO (Diuji di Chrome, FF, Opera, IE, dan Safari).

Alfa
sumber
Sayangnya, ini tidak berfungsi di Safari5, karena ia kembali NaN. Di Safari Anda harus menggunakan konstruktor lain yang memungkinkan new Date(year, month, day);, mengenai contoh ini:new Date(myDate[2], myDate[1], myDate[0]);
insertusernamehere
13
Daripada mengonversi string tanggal dari format "Eropa" ke "Amerika", lebih baik mengonversinya menjadi format ISO 8601 ( YYYY-MM-DD), yang dijamin akan dipahami oleh Date(), dan, secara umum, merupakan format yang paling dapat dioperasikan untuk string tanggal.
Walter Tross
3
Catatan: new Date(newDate).getTime()akan menghasilkan cap waktu dalam resolusi milidetik.
h7r
3
Untuk detik gunakan: Math.floor(new Date(newDate).getTime() / 1000)
metamagikum
54

Coba fungsi ini, ia menggunakan metode Date.parse () dan tidak memerlukan logika khusus:

function toTimestamp(strDate){
   var datum = Date.parse(strDate);
   return datum/1000;
}
alert(toTimestamp('02/13/2009 23:31:30'));
Ketan Savaliya
sumber
25
var dtstr = "26-02-2012";
new Date(dtstr.split("-").reverse().join("-")).getTime();
Diode
sumber
24

kode refactored ini akan melakukannya

let toTimestamp = strDate => Date.parse(strDate)

ini bekerja pada semua browser modern kecuali ie8-

Jalasem
sumber
10

ada dua masalah disini. Pertama, Anda hanya dapat memanggil getTime dengan instance tanggal. Anda perlu membungkus Tanggal baru dalam tanda kurung atau menetapkannya ke variabel.

Kedua, Anda harus memberikannya string dalam format yang tepat.

Contoh kerja:

(new Date("2012-02-26")).getTime();
Alan Bogu
sumber
1
Tidak perlu membungkus tanggal instan dalam braket. Hanya format string yang tepat yang diperlukan.
maswerdna
5

Anda hanya perlu membalikkan digit tanggal dan mengubahnya -dengan ,:

 new Date(2012,01,26).getTime(); // 02 becomes 01 because getMonth() method returns the month (from 0 to 11)

Dalam kasus Anda:

 var myDate="26-02-2012";
 myDate=myDate.split("-");
 new Date(parseInt(myDate[2], 10), parseInt(myDate[1], 10) - 1 , parseInt(myDate[0]), 10).getTime();

PS UK lokal tidak masalah di sini.

antonjs
sumber
Format tanggal itu juga tidak valid, dan tidak akan berfungsi dengan baik lintas-browser dan lintas-lokal (tidak, misalnya, bagi saya di Chrome dengan lokal UK). Jika Anda akan menyarankan format, sarankan yang sebenarnya didokumentasikan berfungsi.
TJ Crowder
Saya mendapatkan contoh dari developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… . Saya hanya lupa untuk menyimpan talinya. Sekarang berhasil.
antonjs
2
Oke, setidaknya sekarang kode di atas tidak menggunakan format tanggal yang tidak valid - hanya memberikan tanggal yang salah, karena dua alasan terpisah. Di atas Anda telah menentukan tanggal 2 Maret 2014 (Anda memiliki pesanan lapangan yang kacau). Dan jika bidang berada dalam urutan yang benar, Anda akan menentukan tanggal 26 Maret 2012 (nilai bulan dimulai dari nol). Tetapi karena OP memiliki string, bukan serangkaian angka, itu tidak terlalu berguna bahkan jika Anda mengatasi masalah tersebut.
TJ Crowder
@TJ Crowder terima kasih atas saran Anda. Saya memperbaiki kode ketika Anda mengatakan mengubah String ke Nomor. Merci.
antonjs
2
Contoh kode pertama masih salah , dan menggunakan Numberstring dimulai dengan 0bermasalah pada beberapa mesin - gunakan parseIntdan tentukan radix.
TJ Crowder
5
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
4

Untuk mengonversi tanggal (ISO) menjadi cap waktu Unix , saya berakhir dengan cap waktu 3 karakter lebih lama dari yang dibutuhkan sehingga tahun saya sekitar 50k ...

Saya harus membaginya dengan 1000: new Date('2012-02-26').getTime() / 1000

orszaczky
sumber
3

Bagi mereka yang ingin memiliki stempel waktu yang dapat dibaca dalam format, yyyymmddHHMMSS

> (new Date()).toISOString().replace(/[^\d]/g,'')              // "20190220044724404"
> (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -3) // "20190220044724"
> (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -9) // "20190220"

Contoh penggunaan: ekstensi file cadangan. /my/path/my.file.js.20190220

allenhwkim
sumber
3

Jika Anda datang ke sini mencari cap waktu saat ini

  var date      = new Date();
  var timestamp = date.getTime();

TLDR:

new Date().getTime();
//console.log(new Date().getTime());
TimeTrax
sumber
2

String Anda tidak dalam format yang Dateobyek ditentukan untuk menangani . Anda harus menguraikan sendiri, menggunakan parsing pustaka tanggal seperti MomentJS atau yang lebih lama (dan saat ini tidak dikelola, sejauh yang saya tahu) DateJS , atau memijatnya ke format yang benar (misalnya, 2012-02-29) sebelum meminta Dateuntuk menguraikannya .

Mengapa Anda mendapatkan NaN: Ketika Anda meminta new Date(...)untuk menangani string yang tidak valid, ia mengembalikan Dateobjek yang diatur ke tanggal yang tidak valid ( new Date("29-02-2012").toString()kembali "Invalid date"). Memanggil getTime()objek tanggal di negara ini kembali NaN.

TJ Crowder
sumber
@ Benvds: Keren, terima kasih. Meskipun saya menemukan komentar "Juga, itu tidak merusak DOM" agak aneh ... Saya berharap apa yang mereka maksudkan adalah bahwa itu tidak mengubah Dateobjek (yang tidak ada hubungannya dengan DOM).
TJ Crowder
2
/**
 * Date to timestamp
 * @param  string template
 * @param  string date
 * @return string
 * @example         datetotime("d-m-Y", "26-02-2012") return 1330207200000
 */
function datetotime(template, date){
    date = date.split( template[1] );
    template = template.split( template[1] );
    date = date[ template.indexOf('m') ]
        + "/" + date[ template.indexOf('d') ]
        + "/" + date[ template.indexOf('Y') ];

    return (new Date(date).getTime());
}
Evgeniy
sumber
0

Jawaban telah diberikan oleh pengembang lain tetapi dengan cara saya sendiri, Anda dapat melakukan ini dengan cepat tanpa membuat fungsi yang ditentukan pengguna sebagai berikut:

var timestamp = Date.parse("26-02-2012".split('-').reverse().join('-'));
alert(timestamp); // returns 1330214400000
Frederick Eze
sumber