Вопрос

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

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

Это было полезно?

Решение

Коротко и эффектно:

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

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

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

+new Date

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

Date.now()

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

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

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

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

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

time();

Я предоставляю несколько решений с описаниями в этом ответе. Не стесняйтесь задавать вопросы, если что-то неясно
PS: к сожалению, кто-то слил это в топ-ответ, не отдавая должное. <Ч>

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

Date.now() /1000 |0
  

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

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

Math.floor(Date.now() /1000);
<Ч>

Некоторая альтернатива от Дерек & # 26381; & # 26371; & # 21151; & # 22827; взята из комментарии под этим ответом:

new Date/1e3|0
<Ч>

Polyfill, чтобы Date.now () работал:

Чтобы заставить его работать в IE, вы можете сделать это (Polyfill от 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, рассмотрите вариант этого ответа, поскольку я его не нашел я сам.

<Ч>

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

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

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

  

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

<Ч>

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

var timestamp = Number(new Date()); // current time as number

jQuery предоставляет свой собственный метод для получения метки времени:

var timestamp = $.now();

(кроме того, он просто реализует выражение (новая дата) .getTime () )

REF: http://api.jquery.com/jQuery. Теперь /

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

Просто добавим, вот функция для возврата строки метки времени в Javascript. Пример: 15:06:38

function displayTime() {
    var str = "";

    var currentTime = new Date()
    var hours = currentTime.getHours()
    var minutes = currentTime.getMinutes()
    var seconds = currentTime.getSeconds()

    if (minutes < 10) {
        minutes = "0" + minutes
    }
    if (seconds < 10) {
        seconds = "0" + seconds
    }
    str += hours + ":" + minutes + ":" + seconds + " ";
    if(hours > 11){
        str += "PM"
    } else {
        str += "AM"
    }
    return str;
}

В дополнение к другим параметрам, если вам нужен ISO-формат даты, вы можете получить его напрямую.

console.log(new Date().toISOString());

Date , нативный объект в 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();

Я еще не видел

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

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

var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();

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

  

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

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

(new Date).getTime() / 1000
<Ч>

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

Код 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);

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

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

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

// 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>

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

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

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

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

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

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

Сегодня - 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):

 введите описание изображения здесь

Как я заметил, 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 .

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

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

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

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

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

Вот пример:

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

Если вам нужен базовый способ создания метки времени в 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.

Это похоже на работу.

console.log(clock.now);
// returns 1444356078076

console.log(clock.format(clock.now));
//returns 10/8/2015 21:02:16

console.log(clock.format(clock.now + clock.add(10, 'minutes'))); 
//returns 10/8/2015 21:08:18

var clock = {
    now:Date.now(),
    add:function (qty, units) {
            switch(units.toLowerCase()) {
                case 'weeks'   :  val = qty * 1000 * 60 * 60 * 24 * 7;  break;
                case 'days'    :  val = qty * 1000 * 60 * 60 * 24;  break;
                case 'hours'   :  val = qty * 1000 * 60 * 60;  break;
                case 'minutes' :  val = qty * 1000 * 60;  break;
                case 'seconds' :  val = qty * 1000;  break;
                default       :  val = undefined;  break;
                }
            return val;
            },
    format:function (timestamp){
            var date = new Date(timestamp);
            var year = date.getFullYear();
            var month = date.getMonth() + 1;
            var day = date.getDate();
            var hours = date.getHours();
            var minutes = "0" + date.getMinutes();
            var seconds = "0" + date.getSeconds();
            // Will display time in xx/xx/xxxx 00:00:00 format
            return formattedTime = month + '/' + 
                                day + '/' + 
                                year + ' ' + 
                                hours + ':' + 
                                minutes.substr(-2) + 
                                ':' + seconds.substr(-2);
            }
};

Для lodash и подчеркивания пользователи, используйте _. now .

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

Moment.js может абстрагироваться от боли, связанной с датами Javascript.

См .: http://momentjs.com/docs/#/displaying/unix -timestamp /

moment().unix();

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

Date.now()

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

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

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

Документация MDN на Date.now

более простой способ:

var timeStamp=event.timestamp || new Date().getTime();

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

timestamp : parseInt(new Date().getTime()/1000, 10)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top