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