Как вы получаете метку времени в JavaScript? - PullRequest
3690 голосов
/ 21 октября 2008

Как я могу получить метку времени в JavaScript?

Что-то похожее на временную метку Unix, то есть одно число, представляющее текущее время и дату. В виде числа или строки.

Ответы [ 38 ]

33 голосов
/ 20 мая 2017

Дата , нативный объект в JavaScript - это способ получения всех данных о времени.

Просто будьте осторожны в JavaScript, временная метка зависит от установленного клиентского компьютера, поэтому она не является точной на 100%. Чтобы получить наилучший результат, вам нужно получить временную метку от на стороне сервера .

В любом случае, я предпочитаю использовать ваниль. Это обычный способ сделать это в JavaScript:

Date.now(); //return 1495255666921

В MDN упоминается, как показано ниже:

Метод Date.now () возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 UTC.
Поскольку now () является статическим методом Date, вы всегда используете его как Date.now ().

Если вы используете версию ниже ES5, Date.now(); не работает и вам нужно использовать:

new Date().getTime();
28 голосов
/ 31 марта 2014

Тот, кого я еще не видел

Math.floor(Date.now() / 1000); // current time in seconds

Еще один, которого я еще не видел, это

var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();
26 голосов
/ 03 мая 2012

Метод Date.getTime() можно использовать с небольшим изменением:

Значение, возвращаемое методом getTime, равно количеству миллисекунд. с 1 января 1970 года 00:00:00 UTC.

Разделите результат на 1000, чтобы получить метку времени Unix, floor, если необходимо:

(new Date).getTime() / 1000

Метод Date.valueOf() функционально эквивалентен Date.getTime(), что позволяет использовать арифметические операторы для объекта даты для достижения идентичных результатов. На мой взгляд, такой подход влияет на читабельность.

24 голосов
/ 14 октября 2015

Код Math.floor(new Date().getTime() / 1000) можно сократить до new Date / 1E3 | 0.

Пропустите прямой вызов getTime() и используйте | 0 вместо функции Math.floor(). Также хорошо помнить, что 1E3 является более коротким эквивалентом для 1000 (заглавная буква E предпочтительнее, чем строчная, чтобы указать 1E3 в качестве константы).

В результате вы получите следующее:

var ts = new Date / 1E3 | 0;

console.log(ts);
21 голосов
/ 14 июля 2015

Я настоятельно рекомендую использовать moment.js. Чтобы узнать количество миллисекунд с начала эпохи UNIX, выполните команду

moment().valueOf()

Чтобы узнать количество секунд с начала UNIX, выполните

moment().unix()

Вы также можете конвертировать время так:

moment('2015-07-12 14:59:23', 'YYYY-MM-DD HH:mm:ss').valueOf()

Я делаю это все время. Не каламбур предназначен.

Для использования moment.js в браузере:

<script src="moment.js"></script>
<script>
    moment().valueOf();
</script>

Для получения дополнительной информации, включая другие способы установки и использования MomentJS, см. Их документы

20 голосов
/ 29 сентября 2015

// The Current Unix Timestamp
// 1443534720 seconds since Jan 01 1970. (UTC)

// seconds
console.log(Math.floor(new Date().valueOf() / 1000)); // 1443534720
console.log(Math.floor(Date.now() / 1000)); // 1443534720
console.log(Math.floor(new Date().getTime() / 1000)); // 1443534720

// milliseconds
console.log(Math.floor(new Date().valueOf())); // 1443534720087
console.log(Math.floor(Date.now())); // 1443534720087
console.log(Math.floor(new Date().getTime())); // 1443534720087

// jQuery
// seconds
console.log(Math.floor($.now() / 1000)); // 1443534720
// milliseconds
console.log($.now()); // 1443534720087
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
20 голосов
/ 21 мая 2013

Вот простая функция для генерации отметки времени в формате: мм / дд / гг чч: ми: сс

function getTimeStamp() {
    var now = new Date();
    return ((now.getMonth() + 1) + '/' +
            (now.getDate()) + '/' +
             now.getFullYear() + " " +
             now.getHours() + ':' +
             ((now.getMinutes() < 10)
                 ? ("0" + now.getMinutes())
                 : (now.getMinutes())) + ':' +
             ((now.getSeconds() < 10)
                 ? ("0" + now.getSeconds())
                 : (now.getSeconds())));
}
20 голосов
/ 16 марта 2016

Вы можете использовать только

    var timestamp = new Date().getTime();
    console.log(timestamp);

чтобы получить текущую метку времени. Не нужно делать ничего лишнего.

18 голосов
/ 06 июля 2015

Для отметки времени с микросекундным разрешением есть performance.now:

function time() { 
  return performance.now() + performance.timing.navigationStart;
}

Это может, например, привести к 1436140826653.139, тогда как Date.now дает только 1436140826653.

17 голосов
/ 27 июня 2018

Сегодня - 2018.06.27. Я приведу некоторое временное сравнение для чисто js-решений. Это может быть полезно для людей, которые хотят получить / измерить время в JS легким и эффективным способом (например, для приложений реального времени, таких как симуляции, игры и т. Д.)

Протестировано на MacOs High Sierra 10.13.3 на Chrome 67.0.3396.99 (64-разрядная версия), Safari 11.0.3 (13604.5.6), Firefox 59.0.2 (64-разрядная версия). На скриншоте ниже я показываю вам результаты для самого быстрого браузера (Safari):

enter image description here

Как я заметил, Date.now() был самым быстрым способом получения метки времени для всех трех браузеров. Safari выполняет 19,2 млн операций в секунду, Firefox 16,1 млн, Chrome 7,8 млн.

new Date()*1 был самым медленным для Chrome (2.8M) и Firefox (2.6M). Number(new Date()) был самым медленным для Safari (2.9M).

Таким образом, JS-код победителя - Date.now(), а самый быстрый браузер - Safari (в 2 раза быстрее, чем Chrome!).

Вы можете выполнить тестирование на вашей машине здесь: https://jsperf.com/timestamp-test-x.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...