Date.now() возвращает значение в микросекундах, а не в миллисекундах

Date.now(), согласно документации, должен возвращать метку времени Unix или время эпохи, то есть количество миллисекунды, прошедших с 1 января 1970 года.

Текущая отметка времени unix согласно этому веб-сайту (или любым другим допустимым средствам вычисления) составляет приблизительно 1554637184. Обратите внимание, что в этом значении 10 цифр. Это значение на самом деле в миллисекундах.

Однако значение, возвращаемое Date.now() во всех трех браузерах — Chrome 73, Firefox 66.0.2 и Edge 17.17134 — равно 1554637694364, что, по наблюдениям, состоит из 13 цифр, и поэтому я делаю вывод, что это число микросекунды, которое истекли с 1 января 1970 г.

В чем дело?

Я только что понял это после многих лет использования, потому что только что отлаживал код, который сделал проверку, которая не удалась:

let endTime = ...; // a time later than now expressed as a unix timestamp
let now = Date.now();

if (endTime <= now) {
  // And it always came here, and that led me to this discovery
  ...
}

Что это за реализация JavaScript?

ChaosPandion 07.04.2019 13:50

@ChaosPandion Он сообщает об этом значении в трех браузерах, которые я тестирую: Firefox, Chrome и Edge. Я обновил вопрос с номерами версий.

Water Cooler v2 07.04.2019 13:53
This value is actually in milliseconds. нет, это секунды, в соответствии с любой документацией, которую вы хотите прочитать о временной метке unix ... I infer it is the number of microseconds вы делаете неверный вывод ... они были 1554637694364ms с 1970 года
Jaromanda X 07.04.2019 13:53

Простой расчет вручную показывает, что 1554637694364 мс — это примерно 49 лет. Что звучит почти правильно.

mbojko 07.04.2019 13:54

49,26349577800594 года, если быть точным @mbojko :p

Jaromanda X 07.04.2019 13:55
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
312
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Текущее время эпохи (временная метка UNIX), 1554637856 — это число секунды с 01-01-1970, а не миллисекунды.

Date.now() возвращает время эпохи в миллисекунды, поэтому вам нужно

if (endTime <= now / 1000) {
...

Спасибо за устранение путаницы. Это мелочь, которую я мог перепутать со временем. Еще несколько минут, пока я не смогу отметить ваш ответ.

Water Cooler v2 07.04.2019 13:59

На момент написания этой статьи время в секундах с эпохи UNIX составляет около 1 554 637 931. Итак, время в миллисекундах — время JavaScript — составляет около 1 554 637 931 654.

С начала эпохи прошло около 1,55 гигасекунды. Ваши временные метки JavaScript на самом деле составляют миллисекунды.

Другие вопросы по теме