Отримайте епоху для конкретної дати за допомогою Javascript


Відповіді:


181

Ви можете створити Dateоб'єкт і викликати getTimeйого:

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

12
Аргументу місяця для конструктора дати бракує трохи послідовності і насправді базується на нулі. Це означає, що 7 серпня, тож потрібно відняти 1 :-)
Енді Е

6
@Andy - це хитра ідея компенсувати місяці на -1, зберігаючи решту, і саме така штука може змусити космічний човник збитися з місця, якби там колись використовувався JavaScript :)
Анураг,

6
Можливо, краще піти: new Date ("2010-7-26"). GetTime () / 1000, щоб вам не довелося думати про компенсації.
Вінсент Мак-Набб,

5
@Vincent: new Date("2010-7-26")не буде аналізувати в Internet Explorer. Дата конструктор залежить від Date.parse () метод , коли передається рядок, яка залежить від реалізації в ECMA-262 3 - е видання , і в результаті, як відомо , негнучкою в IE.
Andy E

Можна також мінімізувати можливі помилки або непорозуміння із зазначенням часового поясу. Принаймні фактичні (Linux-) версії Firefox, Opera та Chrome підтримують інсталяцію дати JavaScript як нової дати ("1 січня 1970 р. GMT + 00: 00, 00:01"); що також зменшує плутанину щодо правильного формату місяця.
Michael Besteck




0
Number(new Date(2010, 6, 26))

Працює так само, як і речі вище. Якщо вам потрібні секунди, не забудьте/ 1000


0

Деякі відповіді не пояснюють побічних ефектів зміни часового поясу для об’єкта JavaScript Date. Тож ви повинні розглянути цю відповідь, якщо це вас турбує.

Спосіб 1. Залежність часового поясу машини

За замовчуванням JavaScript повертає дату з урахуванням часового поясу машини, тому getTime()результат залежить від комп’ютера. Ви можете перевірити цю поведінку, виконуючи:

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

Це не проблема, якщо ви дійсно хочете, щоб час з часів Епохи враховував ваш часовий пояс. Отже, якщо ви хочете отримати час з часу Епохи на поточну дату або навіть на вказану дату на основі часового поясу комп’ютера , ви можете продовжувати використовувати цей метод.

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

Спосіб 2: Незалежність часового поясу машини

Однак, якщо ви хочете отримати варіацію часового поясу та отримати час з часу Епохи на вказану дату в UTC (тобто незалежна від часового поясу), вам потрібно використовувати Date.UTCметод або перенести дату з вашого часового поясу на 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

Отже, використовуючи цей метод (або, як варіант, віднімаючи різницю), результат повинен бути:

// 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, якщо ви не знаєте, що робите (див. Примітку вище), вам слід віддати перевагу методу 2 , оскільки він не залежить від машини.


Кінцева примітка

Хоча рекомендації в цій відповіді і оскільки Date.UTCне працюють без вказаної дати / часу, ви можете схилятися до використання альтернативного підходу і робити щось подібне:

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

Це не має жодного сенсу, і це, мабуть, НЕПРАВИЛЬНО (ви змінюєте дату). Майте на увазі, що цього не робите. Якщо ви хочете отримати час, починаючи з Епохи, від поточної дати І ЧАСУ , швидше за все, з методом 1 все в порядку .


0

Date.parse()метод аналізує рядкове представлення дати і повертає кількість мілісекунд з тих пір 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

Дізнайтеся більше на: Date.parse ()

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.