Ubah tanggal normal menjadi stempel waktu unix


105

Bagaimana cara mengubah tanggal normal 2012.08.10menjadi stempel waktu unix di javascript?

Fiddle: http://jsfiddle.net/J2pWj/




Saya telah melihat banyak posting di sini yang mengubahnya menjadi PHP, Ruby, dll ... Tapi saya perlu melakukan ini di dalam JS.



1
Sudahkah Anda mencoba newDate.getTime () / 1000?
Gareth Parker

@LokiAari ya maaf. Saya melakukan pencarian tetapi tidak menemukannya.
Stan

1
Mungkin saya melewatkan sesuatu tetapi unix timestampsangat mendasar untuk semua teknik dan ilmu komputer. Berharap ada metode kenyamanan bawaan. Saat ini saya menggunakanMath.floor((+new Date()) / 1000);
Mars Robertson

Jawaban:


210
new Date('2012.08.10').getTime() / 1000

Periksa dokumentasi Tanggal JavaScript .


1
Terima kasih untuk halaman dokumentasi saya melakukan apa yang saya inginkan.
Stan

32
Math.floor itu atau bukan stempel waktu unix (itu akan memiliki desimal)
BT

@ fguillen, Mooseman, saya menjalankan dan memeriksa kode ini. Setelah saya mengonversi stempel waktu unix hingga saat ini, saya mendapatkan 2012.08.09, bukan 2012.08.10. Mengapa demikian..?
WP Learner

@ user2584538, lihat jawaban saya di bawah. Anda harus menghapus desimal.
theVinchi

1
@Mentor UNIX waktu diukur dalam detik, bukan milidetik
Nicu Surdu

60
parseInt((new Date('2012.08.10').getTime() / 1000).toFixed(0))

Penting untuk menambahkan toFixed(0) untuk menghapus desimal apa pun saat membagi dengan 1000 untuk mengubah dari milidetik ke detik.

The .getTime()mengembalikan fungsi timestamp dalam milidetik, tapi benar cap waktu unix selalu dalam detik.


5
hanya berhati-hatilah bahwa ini mengembalikan string, bukan angka.
Capaj

3
Poin bagus, mengubah jawaban menjadi bungkus dengan parseInt () untuk mengubah kembali menjadi integer.
theVinchi

11

Anda harus memeriksa api moment.js, ini sangat mudah digunakan dan memiliki banyak fitur bawaan.

Saya pikir untuk masalah Anda, Anda bisa menggunakan sesuatu seperti ini:

var unixTimestamp = moment('2012.08.10', 'YYYY.MM.DD').unix();

9

var d = '2016-01-01T00:00:00.000Z';
console.log(new Date(d).valueOf()); // returns the number of milliseconds since the epoch


5

Anda cukup menggunakan operator + unary

(+new Date('2012.08.10')/1000).toFixed(0);

http://xkr.us/articles/javascript/unary-add/ - lihat di bawah Tanggal.


2
Hanya ingin menambahkan dua komentar di sini: operator tambah + unary tidak diperlukan, karena /sudah menjadi operator matematika. Juga, toFixedmengembalikan string dan bukan angka, jika jenisnya penting ..
Laurens


3
var date = new Date('2012.08.10');
var unixTimeStamp = Math.floor(date.getTime() / 1000);

Dalam hal ini, penting untuk mengembalikan hanya bilangan bulat (jadi pembagian sederhana tidak akan berhasil), dan juga hanya mengembalikan detik yang sebenarnya telah berlalu (itulah mengapa kode ini digunakan Math.floor()dan tidak Math.round()).


2

Anda dapat melakukannya menggunakan Metode Date.parse ().

Date.parse($("#yourCustomDate).val())

Date.parse ("03.03.2016") keluaran-> 1456959600000

Date.parse ("2015-12-12") output-> 1449878400000


1
Bagaimana jawaban ini membedakan dengan yang diberikan oleh Barmar 6 tahun lalu?
Capricorn

1
var datestr = '2012.08.10';
var timestamp = (new Date(datestr.split(".").join("-")).getTime())/1000;

1

Setelah membandingkan stempel waktu dengan yang dari PHP, semua hal di atas tampaknya tidak benar untuk zona waktu saya. Kode di bawah ini memberi saya hasil yang sama dengan PHP yang paling penting untuk proyek yang saya lakukan.

function getTimeStamp(input) {
    var parts = input.trim().split(' ');
    var date = parts[0].split('-');
	var time = (parts[1] ? parts[1] : '00:00:00').split(':');

	// NOTE:: Month: 0 = January - 11 = December.
	var d = new Date(date[0],date[1]-1,date[2],time[0],time[1],time[2]);
	return d.getTime() / 1000;
}

// USAGE::
var start = getTimeStamp('2017-08-10');
var end = getTimeStamp('2017-08-10 23:59:59');

console.log(start + ' - ' + end);

Saya menggunakan ini di NodeJS, dan kami memiliki zona waktu 'Australia / Sydney'. Jadi, saya harus menambahkan ini di file .env:

TZ = 'Australia/Sydney'

Di atas setara dengan:

process.env.TZ = 'Australia/Sydney'

0

ubah stempel waktu ke stempel waktu unix.

const date = 1513787412; const unixDate = new Date(date * 1000);// Dec 20 2020 (object)

untuk mendapatkan cap waktu setelah konversi const TimeStamp = new Date(date*1000).getTime(); //1513787412000

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.