Как я могу получить метку времени в JavaScript?
Нечто похожее на метку времени Unix, то есть одно число, представляющее текущее время и дату. Либо в виде числа или строки.
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);
}
};
Более простой способ:
var timeStamp=event.timestamp || new Date().getTime();
На момент написания этой статьи первому ответу было 9 лет, и с тех пор многое изменилось - не в последнюю очередь, у нас есть почти универсальная поддержка нехакерского решения:
Date.now()
Если вы хотите быть абсолютно уверены, что это не сломается в каком-то древнем (до ie9) браузере, вы можете поставить его за чек, например так:
const currentTimestamp = (!Date.now ? +new Date() : Date.now());
Это вернет миллисекунды со времени эпохи, конечно, не секунды.
Moment.js может абстрагироваться от боли, связанной с датами Javascript.
Смотрите: http://momentjs.com/docs/#/displaying/unix-timestamp/
moment().unix();
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();
Я узнал очень крутой способ преобразования данного объекта Date в метку времени Unix из исходного кода JQuery Cookie на днях.
Вот пример:
var date = new Date();
var timestamp = +date;
Вы можете использовать только
var timestamp = new Date().getTime();
console.log(timestamp);
Чтобы получить текущую метку времени. Не нужно делать ничего лишнего.
Я предоставляю несколько решений с описаниями в этом ответе. Не стесняйтесь задавать вопросы, если что-то неясно
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
Код 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);
Для lodash и подчеркивания пользователей используйте: _.now
.
var timestamp = _.now(); // in milliseconds
Один я еще не видел
Math.floor(Date.now() / 1000); // current time in seconds
Еще один, которого я еще не видел,
var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();
У этого есть решение: которое преобразует метку времени Unix во время в JS, попробуйте это
var a = new Date(UNIX_timestamp*1000);
var hour = a.getUTCHours();
var min = a.getUTCMinutes();
var sec = a.getUTCSeconds();
var timestamp = Number(new Date()); // current time as number
// 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>
В дополнение к другим опциям, если вы хотите ISO формата даты, вы можете получить его напрямую
console.log(new Date().toISOString());
Я настоятельно рекомендую использовать 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, см. В документах.
jQuery предоставляет свой собственный метод для получения метки времени:
var timestamp = $.now();
(кроме того, он просто реализует выражение (new Date).getTime()
)
REF: http://api.jquery.com/jQuery.now/ а>
JavaScript работает с количеством миллисекунд с начала эпохи, тогда как большинство других языков работают с секундами. Вы можете работать с миллисекундами, но как только вы передадите значение, скажем, PHP, родные функции PHP, вероятно, потерпят неудачу. Поэтому, чтобы быть уверенным, я всегда использую секунды, а не миллисекунды.
Это даст вам метку времени Unix (в секундах):
var unix = Math.round(+new Date()/1000);
Это даст вам миллисекунды с эпохи (не отметка времени Unix):
var milliseconds = new Date().getTime();
Если вам нужен базовый способ создания метки времени в 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.
Если это для целей ведения журнала, вы можете использовать ISOString
new Date().toISOString()
" 2019-05-18T20 : 02 : 36.694Z "
Просто добавим, вот функция для возврата строки метки времени в 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;
}
Вот простая функция для генерации метки времени в формате: мм / дд / гг чч: ми: сс
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())));
}
Для отметки времени с микросекундным разрешением есть performance.now
а> :
function time() {
return performance.now() + performance.timing.navigationStart;
}
Это может, например, дать 1436140826653.139
, тогда как Date.now
дает только 1436140826653
.
Date.getTime()
можно использовать с немного подправить:
Значение, возвращаемое методом getTime, представляет собой количество миллисекунд с 1 января 1970 года 00:00:00 UTC.
Разделите результат на 1000, чтобы получить метку времени Unix, floor
при необходимости:
(new Date).getTime() / 1000
Метод Date.valueOf()
функционально эквивалентен Date.getTime()
, что позволяет использовать арифметические операторы для объекта даты для достижения идентичных результатов. На мой взгляд, такой подход влияет на читабельность.
console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch
Любые браузеры, не поддерживаемые Date.now, вы можете использовать это для получения текущей даты:
currentTime = Date.now() || +new Date()
Сегодня - 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):
Как я заметил, 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 .
var time = Date.now || function() {
return +new Date;
};
time();
Мне это нравится, потому что оно маленькое
+new Date
Мне это тоже нравится, потому что он такой же короткий и совместим с современными браузерами, и более 500 человек проголосовали за то, чтобы он был лучше
Date.now()
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.