Nhận kỷ nguyên cho một ngày cụ thể bằng Javascript


Câu trả lời:


182

Bạn có thể tạo một Dateđối tượng và gọi getTimenó:

new Date(2010, 6, 26).getTime() / 1000

12
Đối số tháng cho hàm tạo ngày thiếu một chút nhất quán và thực tế là dựa trên số không. Điều này có nghĩa là 7 Tháng Tám, vì vậy bạn cần phải trừ đi 1 :-)
Andy E

6
@Andy - đó là một ý tưởng kinh khủng khi bù lại số tháng bằng -1 trong khi vẫn giữ phần còn lại, và chính xác là thứ có thể khiến tàu con thoi trở nên tồi tệ, nếu JavaScript từng được sử dụng ở đó :)
Anurag

6
Có lẽ tốt hơn nên sử dụng: new Date ("2010-7-26"). GetTime () / 1000 để bạn không phải suy nghĩ về hiệu số.
Vincent McNabb,

5
@Vincent: 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.
Andy E,

Người ta cũng có thể giảm thiểu các lỗi hoặc hiểu lầm có thể xảy ra khi xác định múi giờ. Ít nhất các phiên bản thực tế (Linux-) của Firefox, Opera và Chrome hỗ trợ tạo JavaScript Ngày giống như Ngày mới ("Ngày 1 tháng 1 năm 1970 GMT + 00: 00, 00:01"); điều này cũng làm giảm sự nhầm lẫn về định dạng tháng chính xác.
Michael Besteck




0
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


0

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.UTCphươ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.UTCkhô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 .


0

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

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.