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

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

4353
pupeno 21 Окт 2008 в 13:29

29 ответов

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

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);
            }
};
13
Ronnie Royston 9 Окт 2015 в 02:03

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

var timeStamp=event.timestamp || new Date().getTime();
8
Vicky Gonsalves 26 Окт 2013 в 03:51

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

Date.now()

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

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

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

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

9
Olemak 14 Дек 2017 в 10:09

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

Смотрите: http://momentjs.com/docs/#/displaying/unix-timestamp/

moment().unix();
10
Rimian 6 Мар 2015 в 00:33

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();
40
Alireza 5 Июл 2019 в 17:58

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

Вот пример:

var date = new Date();
var timestamp = +date;
14
george 11 Мар 2015 в 09:52

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

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

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

21
Ruslan López 24 Июн 2016 в 18:48

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


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

Date.now() /1000 |0

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

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

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

Некоторая альтернатива от Дерека 朕 會 功夫, взятая из комментариев ниже этого ответа:

new Date/1e3|0

Polyfill для работы Date.now():

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

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


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

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

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

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


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

130
mgthomas99 4 Апр 2018 в 15:46

Код 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);
25
Valentin 27 Мар 2018 в 06:08

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

var timestamp = _.now(); // in milliseconds
12
Muhammad Reda 30 Мар 2015 в 08:40

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

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

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

var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();
29
mgthomas99 4 Апр 2018 в 16:10

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

var a = new Date(UNIX_timestamp*1000);
var hour = a.getUTCHours();
var min = a.getUTCMinutes();
var sec = a.getUTCSeconds();
14
Anoop P S 1 Июл 2013 в 06:47
var timestamp = Number(new Date()); // current time as number
88
aemkei 21 Окт 2008 в 13:00
// 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
Ruslan López 24 Июн 2016 в 18:47

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

console.log(new Date().toISOString());
43
Ruslan López 24 Июн 2016 в 18:59

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

22
FullStack 1 Окт 2015 в 07:28

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

var timestamp = $.now();

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

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

61
VisioN 15 Мар 2013 в 14:19

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

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

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

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

var milliseconds = new Date().getTime();
271
Peter Mortensen 30 Май 2011 в 21:12

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

14
Kevin Leary 29 Май 2015 в 13:40

Если это для целей ведения журнала, вы можете использовать ISOString

new Date().toISOString()

" 2019-05-18T20 : 02 : 36.694Z "

12
cenkarioz 18 Май 2019 в 20:43

Просто добавим, вот функция для возврата строки метки времени в 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;
}
41
live-love 21 Сен 2012 в 19:46

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

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
VisioN 3 Июл 2013 в 15:10

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

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

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

(new Date).getTime() / 1000

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

27
Salman A 7 Май 2015 в 09:10
console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch
45
Ruslan López 24 Июн 2016 в 18:48

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

currentTime = Date.now() || +new Date()
16
mr.boyfox 9 Май 2013 в 06:53

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

Протестировано на MacO 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 .

21
Kamil Kiełczewski 27 Июн 2018 в 16:59
var time = Date.now || function() {
  return +new Date;
};

time();
144
Martin Tournoij 16 Дек 2014 в 13:31

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

+new Date

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

Date.now()
507
xer0x 30 Ноя 2017 в 19:23