Як я можу отримати позначку часу в JavaScript?
Щось подібне до часової позначки Unix , тобто єдине число, яке представляє поточний час і дату. Або як число або рядок.
Як я можу отримати позначку часу в JavaScript?
Щось подібне до часової позначки Unix , тобто єдине число, яке представляє поточний час і дату. Або як число або рядок.
Відповіді:
+ new Date()
Одинарний оператор, як-от plusзапускає valueOfметод в Dateоб'єкті, і він повертає часову позначку (без будь-яких змін).
Деталі:
Практично на всіх поточних браузерах, які ви можете використовувати, Date.now()щоб отримати позначку часу в мілісекундах ; помітним винятком з цього є 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());
Date.now() / 1000 | 0постраждаєте від проблеми 2038 року ? new Date('Jan 1, 2039') / 1000 | 0 == -2117514496
~~(Date.now() / 1000)
Date.now()
+new Dataрозумна, вона не читається іншими дияволами. Date.now()чіткіше і гарантує, що всі інші знають, що відбувається.
Мені це подобається, тому що він невеликий:
+new Date
Мені це також подобається, тому що він такий же короткий і сумісний із сучасними браузерами, і понад 500 людей проголосували, що це краще:
Date.now()
new Date().getTime(). На щастя для мене, швидше рішення - вже розбірливе рішення!
new Date().toString()називається.
+робить оператор, щоб він вийшов, як струна?
JavaScript працює з кількістю мілісекунд з епохи, тоді як більшість інших мов працює з секундами. Ви можете працювати з мілісекундами, але як тільки ви передасте значення, щоб сказати PHP, нативні функції PHP, ймовірно, не зможуть. Тож, щоб бути впевненим, я завжди використовую секунди, а не мілісекунди.
Це дасть вам часову позначку Unix (у секундах):
var unix = Math.round(+new Date()/1000);
Це дасть вам мілісекунд з епохи (не часової позначки Unix):
var milliseconds = new Date().getTime();
Unix timestampпроти Seconds since the Epoch. Чи не повинні ці двоє означати одне й те саме?
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);
Деректезна альтернатива Дерека 功夫 會 功夫 взята з коментарів нижче цієї відповіді:
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
Date.now()довідка: developer.mozilla.org/en-US/docs/JavaScript/Reference/…
new Date/1e3|0.
jQuery надає власний метод отримання позначки часу:
var timestamp = $.now();
(до того ж він просто реалізує (new Date).getTime()вираз)
parseInt, оскільки отримане значення завжди буде а Number.
console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch
+new Date.. :)
Date.now()
На додаток до інших варіантів, якщо ви хочете, щоб формат дати ISO, ви можете отримати його безпосередньо
console.log(new Date().toISOString());
new Date("2017-05-04T07:11:28.940Z") - new Date("2017-05-04T07:11:14.092Z")
Просто для додавання, ось функція повернення рядка часової позначки в Javascript. Приклад: 15:06:38 PM
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;
}
Дата , рідний об’єкт у JavaScript - це спосіб отримати всі дані про час.
Просто будьте уважні в JavaScript, часова мітка залежить від набору клієнтського комп'ютера, тому це не 100% точна часова марка. Щоб досягти найкращого результату, потрібно отримати позначку часу на стороні сервера .
У будь-якому випадку, моїм кращим способом є використання ванілі. Це звичайний спосіб зробити це в JavaScript:
Date.now(); //return 1495255666921
У MDN це зазначено нижче:
Метод Date.now () повертає кількість мілісекунд, що минула з 1 січня 1970 року 00:00:00 UTC.
Оскільки тепер () є статичним методом 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.now() /1000 |0робить те саме, на що відповіли раніше
Math.floor()в нього зміни, але тільки для того, щоб зрозуміти, що це має такий же ефект, як і |0. я не хотів нашкодити тобі чи чомусь. я просто хотів сказати вам, що ваша відповідь якимось чином вже існує. дивлячись на всі відповіді, є деякі, які певним чином помічають слово.
_.now()- це трохи зайвий рівень. Я рекомендую лише імпортувати функціонал Lodash, який потрібно використовувати (в даному випадку _.now () на NPM ), але навіть вони застаріли у своєму пакеті на користь просто використання Date.now().
Date.getTime()Метод може бути використаний з трохи підправити:
Значення, повернене методом getTime, - це кількість мілісекунд з 1 січня 1970 року 00:00:00 UTC.
Розділіть результат на 1000, щоб отримати часову позначку Unix, floorякщо необхідно:
(new Date).getTime() / 1000
Date.valueOf()Метод функціонально еквівалентний Date.getTime(), що робить можливим використовувати арифметичні операції на дати об'єкта для досягнення ідентичних результатів. На мою думку, такий підхід впливає на читаність.
new Date().getTime() / 1000
()після new Dateі .getTime()оскільки /ви все одно буде передавати об'єкт Date в число.
Код Math.floor(new Date().getTime() / 1000)можна скоротити до new Date / 1E3 | 0.
Подумайте пропустити пряме getTime()виклик і використовувати його | 0як заміну Math.floor()функції. Також добре пам’ятати 1E3, що це коротший еквівалент 1000(великі регістри Е є кращими, ніж малі, щоб позначати 1E3як постійні).
В результаті ви отримуєте наступне:
var ts = new Date / 1E3 | 0;
console.log(ts);
"Math.floor(new Date().getTime()/1000)".length == 37; "new Date/1E3|0".length == 14; 37 -14 = 23 байти;
Math.floor()по |0робить цей код «ясно і зрозуміло». Поясніть мені, в чому сенс зберегти 1 байт, замінивши 1000на 1E3. Це смішно. Я бачу поганий код.
Сьогодні - 2020.04.23 я виконую тести на обрані рішення. Я протестував на MacOs High Sierra 10.13.6 на Chrome 81.0, Safari 13.1, Firefox 75.0
Date.now()(E) найшвидше на Chrome і Safari і друге швидке на Firefox, і це, мабуть, найкращий вибір для швидкого крос-браузерного рішенняperformance.now()(G), що дивно, на 100 разів швидше, ніж інші рішення на Firefox, але найповільніше на ChromeРезультати для хрому
Ви можете виконати тест на своїй машині ТУТ
Код, використаний у тестах, представлений нижче фрагментом
performance.now()як це має бути найбільш точним з точки зору штампа.
privacy.reduceTimerPrecisionякий округляє результати до найближчої мілісекунди. Він також включений за замовчуванням, але його можна відключити. developer.mozilla.org/en-US/docs/Web/API/Performance/now
Дуже рекомендую використовувати 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, дивіться їхні документи
Для позначки часу з роздільною здатністю мікросекунди є performance.now:
function time() {
return performance.now() + performance.timing.navigationStart;
}
Наприклад 1436140826653.139, це може дати прибутковість , хоча Date.nowтільки дає 1436140826653.
Можна використовувати тільки
var timestamp = new Date().getTime();
console.log(timestamp);
щоб отримати поточну мітку часу. Не потрібно нічого зайвого робити.
Ось проста функція для створення часової позначки у форматі: 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())));
}
(new (chain (-date) (to-i-s-o-string))).
// 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>
Будь-які браузери не підтримують Date.now, ви можете використовувати це для отримання поточного часу дати:
currentTime = Date.now() || +new Date()
Date.nowнасправді існує (і функції), перш ніж намагатися викликати його: currentTime = typeof Date.now === "function" ? Date.now() : +new Date().
Днями я дізнався про класний спосіб перетворення заданого об’єкта Date в часову позначку Unix з вихідного коду Cookie JQuery .
Ось приклад:
var date = new Date();
var timestamp = +date;
Якщо ви хочете основний спосіб генерування часової позначки в Node.js, це добре працює.
var time = process.hrtime();
var timestamp = Math.round( time[ 0 ] * 1e3 + time[ 1 ] / 1e6 );
Наша команда використовує це, щоб перебрати кеш-пам'ять у середовищі localhost. Вихід , /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);
}
};
Для користувачів лодашу та підкреслення використовуйте _.now.
var timestamp = _.now(); // in milliseconds
Moment.js може абстрагувати багато болю у роботі з датами Javascript.
Дивіться: http://momentjs.com/docs/#/displaying/unix-timestamp/
moment().unix();
moment().valueOf(). Дивіться мою відповідь.
На момент написання цього запису, найвищої відповіді - 9 років, і з того часу багато що змінилося - щонайменше, у нас є універсальна підтримка не хакітичного рішення:
Date.now()
Якщо ви хочете бути абсолютно впевненими, що це не зламається в якомусь старовинному (до i9) браузері, ви можете поставити його за чек, наприклад:
const currentTimestamp = (!Date.now ? +new Date() : Date.now());
Це поверне мілісекунди з часу епохи, звичайно, не секунди.
більш простий спосіб:
var timeStamp=event.timestamp || new Date().getTime();
eventпоходить. Вам потрібно дати краще пояснення того, як ви вирішите це питання, а не писати відповідь. Будь ласка!