Chuyển đổi ngày bình thường thành dấu thời gian unix


105

Làm cách nào để chuyển đổi ngày bình thường 2012.08.10sang dấu thời gian unix trong javascript?

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




Tôi đã thấy nhiều bài đăng ở đây chuyển đổi nó sang PHP, Ruby, v.v. Nhưng tôi cần làm điều này bên trong JS.



1
Bạn đã thử newDate.getTime () / 1000 chưa?
Gareth Parker

@LokiAstari vâng, xin lỗi. Tôi đã tìm kiếm nhưng không tìm thấy.
Stan

1
Có lẽ tôi đang thiếu một cái gì đó nhưng unix timestamprất cơ bản đối với tất cả các ngành kỹ thuật và khoa học máy tính. Ước gì có một phương thức tiện lợi được tích hợp sẵn. Hiện tôi đang sử dụngMath.floor((+new Date()) / 1000);
Mars Robertson

Câu trả lời:


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

Kiểm tra tài liệu Ngày JavaScript .


1
Cảm ơn trang tài liệu tôi đã làm những gì tôi muốn.
Stan

32
Math.floor nó hoặc nó không phải là một dấu thời gian unix (nó sẽ có một số thập phân)
BT

@ fguillen, Mooseman, tôi chạy và kiểm tra mã này. Khi tôi chuyển đổi dấu thời gian unix thành ngày tháng, nó sẽ đưa cho tôi 2012.08.09 thay vì 2012.08.10. Tại sao vậy..?
WP Learner

@ user2584538, hãy xem câu trả lời của tôi bên dưới. Bạn phải xóa các số thập phân.
theVinchi

1
Hiện @Mentor UNIX được đo bằng giây, không mili giây
Nicu Surdu

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

Điều quan trọng là thêm dấu toFixed(0)để loại bỏ bất kỳ số thập phân nào khi chia cho 1000 để chuyển đổi từ mili giây thành giây.

Các .getTime()chức năng trả về dấu thời gian trong mili giây, nhưng là sự thật unix timestamps luôn trong vài giây.


5
chỉ cần lưu ý rằng điều này trả về một chuỗi, không phải một số.
Capaj

3
Tốt, đã thay đổi câu trả lời thành bọc bằng parseInt () để chuyển đổi lại thành số nguyên.
theVinchi vào

11

Bạn nên xem api moment.js, nó rất dễ sử dụng và có nhiều tính năng được tích hợp sẵn.

Tôi nghĩ đối với vấn đề của bạn, bạn có thể sử dụng một cái gì đó như sau:

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


5

Bạn chỉ cần sử dụng toán tử một ngôi +

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

http://xkr.us/articles/javascript/unary-add/ - xem trong Ngày.


2
Chỉ muốn thêm hai chú thích ở đây: toán tử add + một bậc không cần thiết, vì /đã là một toán tử toán học. Ngoài ra, toFixedtrả về một chuỗi chứ không phải số, trong trường hợp loại là quan trọng ..
Laurens

3

Bạn có thể sử dụng Date.parse () , nhưng các định dạng đầu vào mà nó chấp nhận phụ thuộc vào việc triển khai. Tuy nhiên, nếu bạn có thể chuyển đổi ngày sang định dạng ISO (YYYY-MM-DD) , thì hầu hết các triển khai đều phải hiểu nó.

Xem Tại sao Date.parse cho kết quả không chính xác? .


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

Trong trường hợp này, điều quan trọng là chỉ trả về một số nguyên (vì vậy một phép chia đơn giản sẽ không thực hiện được) và cũng chỉ trả về những giây thực sự đã trôi qua (đó là lý do tại sao mã này sử dụng Math.floor()chứ không phải Math.round()).


2

Bạn có thể làm điều đó bằng Phương thức Date.parse ().

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

Đầu ra date.parse ("03.03.2016" )-> 1456959600000

Đầu ra Date.parse ("2015-12-12" )-> 1449878400000


1
Câu trả lời này khác với câu trả lời của Barmar 6 năm trước như thế nào?
Ma Kết

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

1

Sau khi so sánh dấu thời gian với dấu thời gian từ PHP, không có dấu nào ở trên có vẻ đúng với múi giờ của tôi. Đoạn mã dưới đây cho tôi kết quả tương tự như PHP, điều quan trọng nhất đối với dự án tôi đang thực hiện.

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);

Tôi đang sử dụng cái này trên NodeJS và chúng tôi có múi giờ 'Úc / Sydney'. Vì vậy, tôi phải thêm điều này vào tệp .env:

TZ = 'Australia/Sydney'

Trên tương đương với:

process.env.TZ = 'Australia/Sydney'

0

chuyển đổi dấu thời gian thành dấu thời gian unix.

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

để lấy timeStamp sau khi chuyển đổi const TimeStamp = new Date(date*1000).getTime(); //1513787412000

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.