Як перетворити 07/26/2010
на часову позначку UNIX за допомогою Javascript?
Як перетворити 07/26/2010
на часову позначку UNIX за допомогою Javascript?
Відповіді:
new Date("2010-7-26")
не буде аналізувати в Internet Explorer. Дата конструктор залежить від Date.parse () метод , коли передається рядок, яка залежить від реалізації в ECMA-262 3 - е видання , і в результаті, як відомо , негнучкою в IE.
new Date("2016-3-17").valueOf()
поверне довгу епоху
Погляньте на http://www.w3schools.com/jsref/jsref_obj_date.asp
Існує функція, UTC()
яка повертає мілісекунди з епохи unix.
Number(new Date(2010, 6, 26))
Працює так само, як і речі вище. Якщо вам потрібні секунди, не забудьте/ 1000
Деякі відповіді не пояснюють побічних ефектів зміни часового поясу для об’єкта 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 все в порядку .
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 ()