javascript - преобразование - сравнение дат js




Как вы получаете временную метку в JavaScript? (20)

Short & Snazzy:

+ new Date()

Унарный оператор, такой как plus запускает метод valueOf в объекте Date и возвращает метку времени (без каких-либо изменений).

Подробности:

Почти во всех текущих браузерах вы можете использовать Date.now() чтобы получить метку времени UTC в миллисекундах ; примечательным исключением является IE8 и ранее (см. таблицу совместимости ).

Вы можете легко сделать прокладку для этого, хотя:

if (!Date.now) {
    Date.now = function() { return new Date().getTime(); }
}

Чтобы получить метку времени в секундах , вы можете использовать:

Math.floor(Date.now() / 1000)

Или, альтернативно, вы можете использовать:

Date.now() / 1000 | 0

Который должен быть немного быстрее, но также менее читаемым ( см. Также этот ответ ).

Я бы рекомендовал использовать Date.now() (с совместимостью). Это немного лучше, потому что оно короче и не создает новый объект Date . Однако, если вам не нужна прокладка и максимальная совместимость, вы можете использовать «старый» метод, чтобы получить метку времени в миллисекундах :

new Date().getTime()

Затем вы можете конвертировать в такие секунды:

Math.round(new Date().getTime()/1000)

И вы также можете использовать метод valueOf который мы показали выше:

new Date().valueOf()

Временная метка в миллисекундах

var timeStampInMs = window.performance && window.performance.now && window.performance.timing && window.performance.timing.navigationStart ? window.performance.now() + window.performance.timing.navigationStart : Date.now();

console.log(timeStampInMs, Date.now());

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

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


JavaScript работает с количеством миллисекунд с эпохи, тогда как большинство других языков работает с секундами. Вы можете работать с миллисекундами, но как только вы передадите значение, чтобы сказать PHP, родные функции PHP, вероятно, потерпят неудачу. Поэтому, чтобы быть уверенным, что я всегда использую секунды, а не миллисекунды.

Это даст вам временную метку Unix (в секундах):

var unix = Math.round(+new Date()/1000);

Это даст вам миллисекунды с эпохи (а не временную метку Unix):

var milliseconds = new Date().getTime();

Вот простая функция для создания метки времени в формате: mm / dd / yy hh: mi: ss

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())));
}

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

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

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


Для пользователей lodash и underscore используйте _.now .

var timestamp = _.now(); // in milliseconds

Если вам нужен базовый способ создания метки времени в Node.js, это хорошо работает.

var time = process.hrtime();
var timestamp = Math.round( time[ 0 ] * 1e3 + time[ 1 ] / 1e6 );

Наша команда использует это, чтобы сэкономить кеш в локальной среде. Результатом является /dist/css/global.css?v=245521377 где 245521377 - это метка времени, созданная hrtime() .

Надеюсь, это поможет, вышеприведенные методы могут работать, но я нашел, что это самый простой подход для наших потребностей в Node.js.


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

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

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

var ts = new Date / 1E3 | 0;

console.log(ts);


Любые браузеры не поддерживаются Date.now, вы можете использовать это для получения текущего времени:

currentTime = Date.now() || +new Date()

Мне это нравится, потому что оно мало:

+new Date

Мне также нравится это, потому что оно так же коротко и совместимо с современными браузерами, и более 500 человек проголосовали за то, что это лучше:

Date.now()

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

Date.now()

Если вы хотите быть абсолютно уверены, что это не сломается в каком-то древнем (pre ie9) браузере, вы можете поставить его за чек, например:

const currentTimestamp = (!Date.now ? +new Date() : Date.now());

Это вернет миллисекунды с эпохи, разумеется, не секунды.

MDN


Сегодня - 2018.06.27. Я предоставляю некоторое сравнение времени для решений pure 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):

Как я Date.now() был самым быстрым методом для получения отметки времени для всех трех браузеров. Safari имеет 19.2M операций в секунду, Firefox 16.1M, Chrome 7.8M.

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

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

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


У этого есть решение: которое преобразует метку unixtime в tim в js, попробуйте это

var a = new Date(UNIX_timestamp*1000);
var hour = a.getUTCHours();
var min = a.getUTCMinutes();
var sec = a.getUTCSeconds();

Я настоятельно рекомендую использовать 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, см. Их docs


Я узнал действительно классный способ преобразования данного объекта Date в временную метку Unix из исходного кода JQuery Cookie на днях.

Вот пример:

var date = new Date();
var timestamp = +date;

когда-то мне это нужно в объектах для вызовов xmlhttp, поэтому мне это нравится.

timestamp : parseInt(new Date().getTime()/1000, 10)


В этом ответе я предлагаю несколько решений с описаниями. Не стесняйтесь задавать вопросы, если что-то неясно
PS: К сожалению, кто-то слил это с верхним ответом, не отдавая должного.

Быстрое и грязное решение:

Date.now() /1000 |0

Предупреждение : оно может сломаться в 2038 году и вернуть отрицательные числа, если вы делаете магию |0 . Вместо этого используйте Math.floor()

Решение Math.floor() :

Math.floor(Date.now() /1000);

Некоторые другие варианты Derek 朕 會 功夫 взяты из комментариев ниже этого ответа:

new Date/1e3|0

Polyfill для получения Date.now() :

Чтобы заставить его работать в IE, вы можете это сделать (Polyfill from MDN ):

if (!Date.now) {
    Date.now = function now() {
        return new Date().getTime();
    };
}

Если вам не нравится год / день недели / летнее время, вы можете снять его и использовать после 2038 года:

var now = (function () {
    var year = new Date(new Date().getFullYear().toString()).getTime();
    return function () {
        return Date.now() - year
    }
})();

Некоторые результаты, как это будет выглядеть:

new Date()
Thu Oct 29 2015 08:46:30 GMT+0100 (Mitteleuropäische Zeit )
new Date(now())
Thu Oct 29 1970 09:46:30 GMT+0100 (Mitteleuropäische Zeit )

Конечно, это сломает летнее время, но в зависимости от того, что вы строите, это может быть полезно для вас, если вам нужно выполнить двоичные операции на отметках времени после того, как int32 переломит в 2038 году.

Это также вернет отрицательные значения, но только если пользователь этого ПК, на котором работает ваш код, меняет часы своего ПК, по крайней мере, до 31 декабря предыдущего года.

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

var relativeTime = (function () {
    var start = Date.now();
    return function () {
        return Date.now() - start
    }
})();

Если вы используете jQuery, вы можете использовать $.now() как описано в Документах jQuery, что делает полипол устаревшим, так как $.now() внутренне делает то же самое: (new Date).getTime()

Если вы просто довольны версией jQuery, подумайте над this ответом, так как я не нашел его сам.

Теперь крошечное объяснение того, что |0 :

Предоставляя | , вы говорите интерпретатору о выполнении двоичной операции ИЛИ. Операции бит требуют абсолютных чисел, которые превращают десятичный результат из Date.now() / 1000 в целое число.

Во время этого преобразования десятичные знаки удаляются, что приводит к тому же результату, что и к использованию Math.floor() но с использованием меньшего количества кода.

Однако будьте осторожны: он преобразует 64-битное двойное число в 32-битное целое число. Это приведет к потере информации при работе с огромными числами. Временные метки будут разрываться после 2038 из-за 32-битного целочисленного переполнения.

Для получения дополнительной информации о Date.now перейдите по этой ссылке: MDN


Дата родного объекта в 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();

console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch


var time = Date.now || function() {
  return +new Date;
};

time();




unix-timestamp