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

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

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

вопрос задан 21.10.2008
pupeno
100652 репутация

36 ответов


  • 4235 рейтинг

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

    ответ дан daveb, с репутацией 54630, 21.10.2008
  • 439 рейтинг

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

     +new Date
     

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

     Date.now()
     
    ответ дан xer0x, с репутацией 9415, 18.02.2011
  • 231 рейтинг

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

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

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

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

     var milliseconds = new Date().getTime();
     
    ответ дан Daithí, с репутацией 3126, 11.05.2011
  • 127 рейтинг
    var time = Date.now || function() {
      return +new Date;
    };
    
    time();
    
    ответ дан Staale, с репутацией 16671, 21.10.2008
  • 101 рейтинг

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


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

     Date.now() /1000 |0
     

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

    Math.floor() :

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

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

     new Date/1e3|0
     

    Полипол для получения 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, подумайте над этим ответом, так как я не нашел его сам.


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

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

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

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


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

    ответ дан GottZ, с репутацией 3054, 12.07.2012
  • 71 рейтинг
    var timestamp = Number(new Date()); // current time as number
    
    ответ дан aemkei, с репутацией 6816, 21.10.2008
  • 51 рейтинг

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

     var timestamp = $.now();
     

    (кроме того, он реализует только (new Date).getTime() выражение)

    REF: http://api.jquery.com/jQuery.now/

    ответ дан VisioN, с репутацией 108097, 15.03.2013
  • 36 рейтинг

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

    ответ дан Tom Viner, с репутацией 4135, 30.04.2009
  • 36 рейтинг

    Чтобы добавить, вот функция, чтобы вернуть строку timestamp в 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;
    }
     
    ответ дан live-love, с репутацией 14253, 21.09.2012
  • 29 рейтинг

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

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

    ответ дан Joaquinglezsantos, с репутацией 616, 29.01.2016
  • 24 рейтинг

    Одного я еще не видел

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

    Еще один, который я еще не видел

     var _ = require('lodash'); // from here https://lodash.com/docs#now
    _.now();
     
    ответ дан Belldandu, с репутацией 976, 31.03.2014
  • 21 рейтинг

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

    ответ дан Valentin, с репутацией 2636, 14.10.2015
  • 21 рейтинг

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

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

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

     (new Date).getTime() / 1000
     

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

    ответ дан Salman A, с репутацией 165526, 3.05.2012
  • 21 рейтинг

    Дата родного объекта в 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();
     
    ответ дан Alireza, с репутацией 39782, 20.05.2017
  • 16 рейтинг

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

    ответ дан blueberry0xff, с репутацией 2125, 29.09.2015
  • 16 рейтинг

    Вот простая функция для создания метки времени в формате: 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())));
    }
     
    ответ дан deepakssn, с репутацией 3040, 21.05.2013
  • 16 рейтинг

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

    ответ дан FullStack, с репутацией 3458, 14.07.2015
  • 15 рейтинг

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

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

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

    ответ дан Jitendra Pawar, с репутацией 651, 16.03.2016
  • 14 рейтинг

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

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

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

    ответ дан iter, с репутацией 300, 6.07.2015
  • 11 рейтинг

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

     currentTime = Date.now() || +new Date()
     
    ответ дан mr.boyfox, с репутацией 8670, 9.05.2013
  • 10 рейтинг

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

     var a = new Date(UNIX_timestamp*1000);
    var hour = a.getUTCHours();
    var min = a.getUTCMinutes();
    var sec = a.getUTCSeconds();
     
    ответ дан Anoop P S, с репутацией 264, 1.07.2013
  • 10 рейтинг

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

    ответ дан Kevin Leary, с репутацией 3427, 29.05.2015
  • 9 рейтинг

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

    Вот пример:

     var date = new Date();
    var timestamp = +date;
     
    ответ дан george, с репутацией 492, 11.03.2015
  • 9 рейтинг

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

     var timestamp = _.now(); // in milliseconds
     
    ответ дан Muhammad Reda, с репутацией 18601, 30.03.2015
  • 9 рейтинг

    Кажется, это работает.

     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);
                }
    };
     
    ответ дан Ron Royston, с репутацией 5124, 9.10.2015
  • 6 рейтинг

    Moment.js может абстрагировать большую часть боли при работе с датами Javascript.

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

     moment().unix();
     
    ответ дан Rimian, с репутацией 19446, 6.03.2015
  • 6 рейтинг

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

     Date.now()
     

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

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

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

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

    ответ дан Olemak, с репутацией 904, 14.12.2017
  • 5 рейтинг

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

     var timeStamp=event.timestamp || new Date().getTime();
     
    ответ дан Vicky Gonsalves, с репутацией 8329, 26.10.2013
  • 4 рейтинг

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

    ответ дан Kamil Kiełczewski, с репутацией 6466, 27.06.2018
  • 3 рейтинг

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

     timestamp : parseInt(new Date().getTime()/1000, 10)
     
    ответ дан DevC, с репутацией 2370, 24.04.2014
  • 3 рейтинг
    var d = new Date();
    console.log(d.valueOf()); 
    
    ответ дан jameslouiz, с репутацией 301, 13.04.2015
  • 3 рейтинг

    Рекомендуемый, правильный способ - Number(new Date()) , с точки зрения удобочитаемости кода,

    Кроме того, UglifyJS и Google-Closure-Compiler уменьшают сложность анализируемого дерева логических кодов (актуально, если вы используете один из них, чтобы скрыть /уменьшить код).

    для временной метки Unix, которая имеет более низкое временное разрешение, просто делите текущее число на 1000 , сохраняя целое.

    ответ дан Eugene, с репутацией 2092, 27.03.2015
  • 2 рейтинг

    var my_timestamp = ~~(Date.now()/1000);

    ответ дан Eugene, с репутацией 2092, 26.03.2015
  • 1 рейтинг
    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())));
    }
    
    ответ дан unknown123, с репутацией 206, 28.03.2018
  • 0 рейтинг

    Вот еще одно решение для создания метки времени в JavaScript - в том числе метод заполнения для одиночных чисел - использование результата, месяца, года, часа, минуты и секунд в его результате (рабочий пример в jsfiddle ):

     var pad = function(int) { return int < 10 ? 0 + int : int; };
    var timestamp = new Date();
    
        timestamp.day = [
            pad(timestamp.getDate()),
            pad(timestamp.getMonth() + 1), // getMonth() returns 0 to 11.
            timestamp.getFullYear()
        ];
    
        timestamp.time = [
            pad(timestamp.getHours()),
            pad(timestamp.getMinutes()),
            pad(timestamp.getSeconds())
        ];
    
    timestamp.now = parseInt(timestamp.day.join("") + timestamp.time.join(""));
    alert(timestamp.now);
     
    ответ дан Saucier, с репутацией 2528, 22.05.2014
  • -20 рейтинг
    time = Math.round(((new Date()).getTime()-Date.UTC(1970,0,1))/1000);
    
    ответ дан Kiragaz, с репутацией 1, 11.11.2009