Как я могу получить метку времени в JavaScript?
Нечто похожее на метку времени Unix , то есть одно число, представляющее текущее время и дату. Либо в виде числа или строки.
Как я могу получить метку времени в JavaScript?
Нечто похожее на метку времени Unix , то есть одно число, представляющее текущее время и дату. Либо в виде числа или строки.
Ответы:
Короткие и шикарные:
Унарный оператор наподобие
plus
запускаетvalueOf
метод вDate
объекте и возвращает метку времени (без каких-либо изменений).Подробности:
Почти во всех современных браузерах вы можете использовать
Date.now()
метку времени UTC в миллисекундах ; Заметным исключением является IE8 и более ранние версии (см. таблицу совместимости ).Вы можете легко сделать прокладку для этого, хотя:
Чтобы получить метку времени в секундах , вы можете использовать:
Или же вы можете использовать:
Который должен быть немного быстрее, но также менее читабельным (также см. этот ответ ).
Я бы порекомендовал использовать
Date.now()
(с совместимостью шим). Это немного лучше, потому что это короче и не создает новыйDate
объект. Однако, если вы не хотите использовать шим и максимальную совместимость, вы можете использовать «старый» метод, чтобы получить метку времени в миллисекундах :Который вы можете затем преобразовать в секунды, например:
И вы также можете использовать
valueOf
метод, который мы показали выше:Отметка времени в миллисекундах
источник
Date.now() / 1000 | 0
пострадает ли проблема 2038 года ?new Date('Jan 1, 2039') / 1000 | 0 == -2117514496
~~(Date.now() / 1000)
Date.now()
+new Data
он умный, он не читается другими разработчиками.Date.now()
понятнее и гарантирует, что все остальные знают, что происходит.Мне это нравится, потому что оно маленькое
Мне это тоже нравится, потому что он такой же короткий и совместим с современными браузерами, и более 500 человек проголосовали за то, чтобы он был лучше:
источник
new Date().getTime()
. К счастью для меня, более быстрое решение - уже разборчивое решение!new Date().toString()
называется.+
делает оператор, чтобы он выглядел как строка?JavaScript работает с количеством миллисекунд с начала эпохи, тогда как большинство других языков работают с секундами. Вы можете работать с миллисекундами, но как только вы передадите значение, скажем, PHP, родные функции PHP, вероятно, потерпят неудачу. Поэтому, чтобы быть уверенным, я всегда использую секунды, а не миллисекунды.
Это даст вам метку времени Unix (в секундах):
Это даст вам миллисекунды с эпохи (не отметка времени Unix):
источник
Unix timestamp
противSeconds since the Epoch
. Разве эти двое не должны означать одно и то же?источник
(Date.now||function(){return +new Date})();
Я предоставляю несколько решений с описаниями в этом ответе. Не стесняйтесь задавать вопросы, если что-то непонятно
PS: к сожалению, кто-то слил это в топ-ответ, не отдавая должное.
Быстрое и грязное решение:
Math.floor()
решение:Некоторая занудная альтернатива Дерека 功夫 會 功夫 взята из комментариев ниже этого ответа:
Polyfill, чтобы получить
Date.now()
работу:Чтобы заставить его работать в IE, вы можете сделать это (Polyfill из MDN ):
Если вас не интересует год / день недели / летнее время, вы можете убрать его и использовать после 2038 года:
Если вы просто хотите узнать относительное время с момента первого запуска кода, вы можете использовать что-то вроде этого:
В случае, если вы используете jQuery, вы можете использовать,
$.now()
как описано в Документах jQuery, что делает полифилд устаревшим, поскольку$.now()
внутри делает то же самое:(new Date).getTime()
Если вы просто довольны версией jQuery, рассмотрите вариант отзыва этого ответа, поскольку я сам не нашел его.
Теперь небольшое объяснение того, что
|0
делает:Предоставляя
|
, вы говорите интерпретатору выполнить двоичную операцию ИЛИ. Битовые операции требуют абсолютных чисел, которые превращают десятичный результат изDate.now() / 1000
целого числа.Во время этого преобразования удаляются десятичные дроби, что приводит к тому же результату, что и при использовании,
Math.floor()
но с использованием меньшего количества кода.Для получения дополнительной информации
Date.now
перейдите по этой ссылке:Date.now()
@ MDNисточник
Date.now()
ссылка: developer.mozilla.org/en-US/docs/JavaScript/Reference/…new Date/1e3|0
.источник
jQuery предоставляет свой собственный метод для получения метки времени:
(кроме того, он просто реализует
(new Date).getTime()
выражение)REF: http://api.jquery.com/jQuery.now/
источник
parseInt
, поскольку полученное значение всегда будет aNumber
.источник
+new Date
.. :)Date.now()
В дополнение к другим опциям, если вы хотите ISO формата даты, вы можете получить его напрямую
источник
new Date("2017-05-04T07:11:28.940Z") - new Date("2017-05-04T07:11:14.092Z")
Просто для суммирования, вот функция для возврата строки метки времени в Javascript. Пример: 15:06:38
источник
Date , нативный объект в JavaScript - это способ получения всех данных о времени.
Просто будьте осторожны в JavaScript, временная метка зависит от установленного клиентского компьютера, так что это не 100% точная временная метка. Чтобы получить лучший результат, вам нужно получить временную метку со стороны сервера .
В любом случае, мой любимый способ - использовать ваниль. Это распространенный способ сделать это в JavaScript:
В MDN это упоминается ниже:
Если вы используете версию ниже ES5,
Date.now();
не работает и вам нужно использовать:источник
Один я еще не видел
Еще один, которого я еще не видел,
источник
Date.now() /1000 |0
делает то же самое и получил ответ раньшеMath.floor()
его, но только чтобы прояснить, что он имеет тот же эффект, что и|0
. Я не хотел причинить тебе боль или что-то еще. Я просто хотел сказать вам, что ваш ответ каким-то образом уже существует. Глядя на все приведенные ответы, есть те, которые каким-то образом замечают слово._.now()
немного излишне. Я бы рекомендовал импортировать только те функциональные возможности Lodash, которые вам нужны (в данном случае _.now () в NPM ), но даже они отказались от своего пакета в пользу простого использованияDate.now()
.Date.getTime()
Метод может быть использован с немного подправить:Разделите результат на 1000, чтобы получить метку времени Unix,
floor
если необходимо:Date.valueOf()
Метод функционально эквивалентенDate.getTime()
, что делает возможным использовать арифметические операции на даты объекта для достижения идентичных результатов. На мой взгляд, такой подход влияет на читабельность.источник
new Date().getTime() / 1000
()
после того, какnew Date
и.getTime()
так/
будет отбрасывать объект Date в число так или иначе.Код
Math.floor(new Date().getTime() / 1000)
может быть сокращен доnew Date / 1E3 | 0
.Подумайте, чтобы пропустить прямой
getTime()
вызов и использовать| 0
в качестве замены дляMath.floor()
функции. Также хорошо помнить, что1E3
это более короткий эквивалент1000
(заглавная буква E предпочтительнее, чем строчная, чтобы указывать1E3
в качестве константы).В результате вы получите следующее:
источник
"Math.floor(new Date().getTime()/1000)".length == 37;
"new Date/1E3|0".length == 14;
37 -14 = 23 байта;Math.floor()
на|0
делает этот код "ясным и понятным". Объясните мне, в чем смысл сохранять 1 байт путем замены1000
на1E3
. Это смешно. Я вижу плохой код.Представление
Сегодня - 2020.04.23 Я выполняю тесты для выбранных решений. Я тестировал на MacOs High Sierra 10.13.6 на Chrome 81.0, Safari 13.1, Firefox 75.0
Выводы
Date.now()
(E) является самым быстрым в Chrome и Safari и вторым быстрым в Firefox, и это, вероятно, лучший выбор для быстрого кросс-браузерного решения.performance.now()
(G), что удивительно, более чем в 100 раз быстрее других решений в Firefox, но медленнее в Chromeподробности
Результаты для хрома
Вы можете выполнить тест на вашей машине ЗДЕСЬ
Код, используемый в тестах, представлен ниже
Показать фрагмент кода
источник
performance.now()
поскольку это должно быть наиболее точным с точки зрения марки.privacy.reduceTimerPrecision
который округляет результаты до ближайшей миллисекунды. Он также включен по умолчанию, но может быть отключен. developer.mozilla.org/en-US/docs/Web/API/Performance/nowЯ настоятельно рекомендую использовать
moment.js
. Чтобы узнать количество миллисекунд с начала UNIX, выполнитеЧтобы узнать количество секунд с начала эпохи UNIX, выполните
Вы также можете конвертировать время так:
Я делаю это все время. Не каламбур предназначен.
Для использования
moment.js
в браузере:Для получения более подробной информации, включая другие способы установки и использования MomentJS, см. Их документы
источник
Для отметки времени с микросекундным разрешением есть
performance.now
:Это может, например, дать
1436140826653.139
, аDate.now
только дает1436140826653
.источник
Вы можете использовать только
чтобы получить текущую метку времени. Не нужно делать ничего лишнего.
источник
Вот простая функция для генерации метки времени в формате: мм / дд / гг чч: ми: сс
источник
(new (chain (-date) (to-i-s-o-string)))
.источник
Любые браузеры, не поддерживаемые Date.now, вы можете использовать это для получения текущей даты:
источник
Date.now
самом деле существует (и функции), прежде чем пытаться вызвать его:currentTime = typeof Date.now === "function" ? Date.now() : +new Date()
.У этого есть решение: которое преобразует штамп unixtime в tim в js, попробуйте
источник
Я узнал действительно крутой способ преобразования данного объекта Date в метку времени Unix из исходного кода JQuery Cookie .
Вот пример:
источник
Если вам нужен базовый способ создания метки времени в Node.js, это работает хорошо.
Наша команда использует это, чтобы уничтожить кеш в локальной среде. Выход - это
/dist/css/global.css?v=245521377
где245521377
временная метка, сгенерированнаяhrtime()
.Надеюсь, это поможет, описанные выше методы также могут работать, но я нашел, что это самый простой подход для наших нужд в Node.js.
источник
Это похоже на работу.
источник
Если это для целей регистрации, вы можете использовать ISOString
new Date().toISOString()
источник
Для пользователей lodash и подчеркивания используйте
_.now
.источник
Moment.js может абстрагироваться от боли при работе с Javascript.
Смотрите: http://momentjs.com/docs/#/displaying/unix-timestamp/
источник
moment().valueOf()
. Смотри мой ответ.На момент написания этой статьи первому ответу было 9 лет, и с тех пор многое изменилось - не в последнюю очередь, у нас есть почти универсальная поддержка нехакерского решения:
Если вы хотите быть абсолютно уверены, что это не сломается в каком-то древнем (до ie9) браузере, вы можете поставить его за чек, например так:
Это вернет миллисекунды со времени эпохи, конечно, не секунды.
Документация MDN на Date.now
источник
более простой способ:
источник
event
. Вам нужно дать лучшее объяснение того, как вы решаете проблему, вместо того, чтобы писать ответ. Пожалуйста!