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.

Stan
sumber
1
kemungkinan duplikat tanggal konversi ke stempel waktu di javascript?
Martin York
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 .

fguillen.dll
sumber
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.

theVinchi
sumber
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();
Mahus
sumber
9

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

KARTHIKEYAN.A
sumber
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.

hybrid9
sumber
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

Anda bisa menggunakan Date.parse () , tetapi format input yang diterima bergantung pada implementasi. Namun, jika Anda dapat mengonversi tanggal ke format ISO (YYYY-MM-DD) , sebagian besar implementasi harus memahaminya.

Lihat Mengapa Date.parse memberikan hasil yang salah? .

Barmar
sumber
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()).

dumitru
sumber
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

Nazar
sumber
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;
OptimusCrime
sumber
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'
Damodar Bashyal
sumber
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

Rajat
sumber