Làm cách nào để chuyển đổi 07/26/2010
sang dấu thời gian UNIX bằng Javascript?
Làm cách nào để chuyển đổi 07/26/2010
sang dấu thời gian UNIX bằng Javascript?
Câu trả lời:
new Date("2010-7-26")
sẽ không phân tích cú pháp trong Internet Explorer. Hàm tạo ngày dựa vào phương thức Date.parse () khi một chuỗi được truyền qua, phương thức này phụ thuộc vào việc triển khai trong phiên bản thứ 3 ECMA-262 và do đó, nổi tiếng là không linh hoạt trong IE.
new Date("2016-3-17").valueOf()
sẽ trở lại một kỷ nguyên dài
Hãy xem tại http://www.w3schools.com/jsref/jsref_obj_date.asp
Có một hàm UTC()
trả về mili giây từ kỷ nguyên unix.
Number(new Date(2010, 6, 26))
Hoạt động theo cách tương tự như những thứ ở trên. Nếu bạn cần giây, đừng quên/ 1000
Một số câu trả lời không giải thích tác dụng phụ của các biến thể trong múi giờ cho đối tượng Ngày của JavaScript. Vì vậy, bạn nên xem xét câu trả lời này nếu đây là một mối quan tâm cho bạn.
Phương pháp 1: Phụ thuộc múi giờ của máy
Theo mặc định, JavaScript trả về Ngày xem xét múi giờ của máy, do đó getTime()
kết quả khác nhau giữa các máy tính. Bạn có thể kiểm tra hành vi này đang chạy:
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
Đây không phải là vấn đề nếu bạn thực sự muốn có thời gian kể từ khi Epoch xem xét múi giờ của bạn. Vì vậy, nếu bạn muốn lấy thời gian kể từ Epoch cho Ngày hiện tại hoặc thậm chí một Ngày được chỉ định dựa trên múi giờ của máy tính , bạn có thể tiếp tục sử dụng phương pháp này.
// 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)
Phương pháp 2: Không phụ thuộc vào múi giờ của máy
Tuy nhiên, nếu bạn muốn biết các biến thể trong múi giờ và nhận thời gian kể từ Kỷ nguyên cho một Ngày cụ thể theo UTC (nghĩa là không phụ thuộc vào múi giờ), bạn cần sử dụng Date.UTC
phương pháp hoặc chuyển ngày từ múi giờ của mình sang 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
Vì vậy, sử dụng phương pháp này (hoặc, cách khác, trừ đi sự khác biệt), kết quả sẽ là:
// 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, trừ khi bạn biết mình đang làm gì (xem lưu ý ở trên), bạn nên thích Phương pháp 2 hơn , vì nó độc lập với máy.
Ghi chú cuối
Mặc dù các gợi ý trong câu trả lời này và vì Date.UTC
không hoạt động nếu không có ngày / giờ cụ thể, bạn có thể có xu hướng sử dụng cách tiếp cận thay thế và làm điều gì đó như sau:
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" (?)
Điều này không có ý nghĩa gì và có thể là SAI (bạn đang sửa đổi ngày tháng). Hãy lưu ý để không làm điều này. Nếu bạn muốn lấy thời gian kể từ Epoch từ ngày VÀ GIỜ hiện tại , bạn có thể chấp nhận sử dụng Phương pháp 1 .
Date.parse()
phương thức phân tích cú pháp biểu diễn chuỗi của một ngày và trả về số mili giây kể từ đó 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
Khám phá thêm tại: Date.parse ()