Как получавате времеви отпечатък в javascript?

Как да получите времеви отпечатък в javascript?

Нещо като Unix времеви клейм, т.е. едно число, което представлява текущото време и дата. Или като число, или като низ.

3545
21 окт. комплект pupeno 21 окт. 2008-10-21 12:29 '08 в 12:29 2008-10-21 12:29
@ 37 отговора
  • 1
  • 2

Кратко и елегантно:

 + new Date() 

Унарният оператор, като plus извиква метода valueOf на обект Date и връща времеви отпечатък (без никакви промени).

Детайли:

Почти във всички съвременни браузъри можете да използвате Date.now() да получите 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 обект. Обаче, ако не искате да използвате PWM и максимална съвместимост, можете да използвате метода „old“, за да получите времевия отпечатък в милисекунди :

 new Date().getTime() 

След това можете да конвертирате в секунди, като това:

 Math.round(new Date().getTime()/1000) 

Можете също да използвате метода valueOf , който показахме по-горе:

 new Date().valueOf() 

Времева отметка в милисекунди

4389
21 окт. отговорът е давеб 21 октомври. 2008-10-21 12:32 '08 в 12:32 2008-10-21 12:32

Харесва ми, защото е малък

 +new Date 
border=0

Също така ми харесва, защото е също толкова къса и съвместима с модерните браузъри, а повече от 500 души гласуваха за по-добро:

 Date.now() 
457
18 февр. отговорът е даден xer0x 18 фев . 2011-02-18 03:33 '11 в 3:33 2011-02-18 03:33

JavaScript работи с броя на милисекунди от епохата, докато повечето други езици работят с секунди. Можете да работите с милисекунди, но веднага щом преминете стойността, за да кажете PHP, естествените функции на PHP вероятно ще се провалят. Затова, за да сте сигурни, че винаги използвам секунди, а не милисекунди.

Това ще ви даде времеви клей (в секунди):

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

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

 var milliseconds = new Date().getTime(); 
246
12 мая '11 в 1:27 2011-05-12 01:27 отговорът е даден Daithí 12 май '11 в 1:27 2011-05-12 01:27
 var time = Date.now || function() { return +new Date; }; time(); 
133
21 окт. отговор, даден Staale 21 октомври 2008-10-21 13:05 '08 в 13:05 2008-10-21 13:05

Давам няколко решения с описания в този отговор. Чувствайте се свободни да задавате въпроси, ако нещо е неясно.
PS: за съжаление, някой го е излял в отговора, не плащайки почит.


Бързо и мръсно решение:

 Date.now() /1000 |0 

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

Math.floor() :

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

Скучната алтернатива на Дерек from 會 功夫 е взета от коментарите под този отговор:

 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 Docs, което прави полифила остарял, така че $.now() вътрешно $.now() прави същото: (new Date).getTime()

Ако сте просто доволни от jQuery версията, помислете за отговора на този въпрос, тъй като аз самият не съм го намерил.


Сега малко обяснение за това какво прави |0 :

Чрез предоставяне | Казвате на интерпретатора да извърши двоична операция ИЛИ. Битовите операции изискват абсолютни числа, които превръщат десетичния резултат от Date.now()/1000 в цяло число.

Десетичните дроби се премахват по време на това преобразуване, което води до същия резултат като използването на Math.floor() но използва по-малко код.

Въпреки това, бъдете внимателни: преобразува 64-битово двойно до 32-битово цяло число. Това ще доведе до загуба на информация при работа с огромен брой. Времевите печати ще бъдат прекъснати след 2038 г. поради препълване на 32-битово цяло число.


За повече информация относно Date.now следвайте тази връзка: Date.now() @MDN

110
12 июля '12 в 10:15 2012-07-12 10:15 отговорът е даден от GottZ 12 юли '12 в 10:15 ч. 2012-07-12 10:15
 var timestamp = Number(new Date()); // current time as number 
77
21 окт. Отговор, даден aemkei Окт 21 2008-10-21 16:00 '08 в 16:00 часа 2008-10-21 16:00 часа

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

 var timestamp = $.now(); 

(освен това той просто реализира израза (new Date).getTime() )

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

56
15 марта '13 в 17:19 2013-03-15 17:19 Отговорът е даден от VisioN на 15 март 2008 г. в 17:19 2013-03-15 17:19

39
30 апр. Отговор Tom Viner 30 април 2009-04-30 19:53 '09 в 19:53 2009-04-30 19:53

Трябва само да добавите функция тук, за да върнете нивото на 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; } 
38
21 сент. отговорът се дава на живо-любов 21 сеп. 2012-09-21 22:12 '12 в 22:12 ч. 2012-09-21 22:12

В допълнение към други параметри, ако искате да получите формата на ISO датаформат, можете да го получите директно

35
29 янв. Joaquinglezsantos отговори на 29 януари 2016-01-29 18:08 '16 в 18:08 2016-01-29 18:08

Едно, което още не съм виждал

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

Друг, който още не съм виждал

 var _ = require('lodash'); // from here https://lodash.com/docs#now _.now(); 
27
31 марта '14 в 11:18 2014-03-31 11:18 Отговорът е даден от Belldandu на 31 март'14 в 11:18 2014-03-31 11:18

Date , роден обект в JavaScript, е начин да получите всички данни за времето.

Просто бъдете внимателни в javascript, timestamp зависи от набора от клиентски компютри, така че не е 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(); 
27
20 мая '17 в 7:49 2017-05-20 07:49 Отговорът е даден от Алиреза на 20 май '17 в 7:49 2017-05-20 07:49

Кодът Math.floor(new Date().getTime()/1000) може да бъде съкратен до new Date/1E3 | 0 new Date/1E3 | 0 new Date/1E3 | 0 new Date/1E3 | 0

Опитайте да прескочите направо getTime() и да използвате | 0 | 0 | 0 | 0 като заместител на функцията Math.floor() . Също така е добре да се помни, че 1E3 е по-кратък еквивалент за 1000 (главна буква E е за предпочитане пред долния случай, за да се определи 1E3 като константа).

В резултат на това ще получите следното:

24
14 окт. отговор на Валентин на 14 октомври. 2015-10-14 19:41 '15 в 19:41 2015-10-14 19:41

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

Стойността, върната от метода getTime, е броят на милисекундите от 1 януари 1970 г. 00:00:00 UTC.

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

 (new Date).getTime() / 1000 

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

24
03 мая '12 в 12:02 2012-05-03 12:02 отговорът е даден Салман А 03 май '12 в 12:02 2012-05-03 12:02

Ето една проста функция за създаване на времеви отпечатък във формат: 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()))); } 
19
21 мая '13 в 12:22 2013-05-21 12:22 отговорът е даден deepakssn 21 май '13 в 12:22 2013-05-21 12:22

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
19
29 сент. отговорът е даден blueberry0xff 29 сеп. 2015-09-29 16:55 '15 в 16:55 2015-09-29 16:55

Можете да използвате само

19
16 марта '16 в 8:45 2016-03-16 08:45 отговорът е даден от Jitendra Pawar 16 март '16 в 8:45 2016-03-16 08:45

Силно препоръчвам да използвате 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, вижте техните документи.

19
14 июля '15 в 11:29 2015-07-14 11:29 отговорът е даден FullStack 14 юли '15 в 11:29 2015-07-14 11:29

За разделителна способност на времеви отпечатъци в performance.now на микросекунди.

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

Това може да бъде, например, 1436140826653.139 , а Date.now само 1436140826653 .

17
06 июля '15 в 3:01 2015-07-06 03:01 отговор е даден от iter 06 юли '15 в 3:01 2015-07-06 03:01

Днес е 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):

2019

Всички браузъри не се поддържат от Date.now, можете да използвате това, за да получите текущото време:

 currentTime = Date.now() || +new Date() 
15
09 мая '13 в 9:53 2013-05-09 09:53 отговорът е даден от mr.boyfox 09 май '13 в 9:53 2013-05-09 09:53

Той има решение: което превръща етикета unixtime в tim за js, опитайте това

 var a = new Date(UNIX_timestamp*1000); var hour = a.getUTCHours(); var min = a.getUTCMinutes(); var sec = a.getUTCSeconds(); 
13
01 июля '13 в 9:47 2013-07-01 09:47 Отговорът е даден от Anoop PS 01 юли '13 в 9:47 2013-07-01 09:47

Ако се нуждаете от основен начин за създаване на времеви отпечатък в Node.js, това работи добре.

 var time = process.hrtime(); var timestamp = Math.round( time[ 0 ] * 1e3 + time[ 1 ] / 1e6 ); 

Нашият екип използва това, за да защити кеша в локална среда. Изходът е /dist/css/global.css?v=245521377 , където 245521377 е 245521377 отпечатък, създаден от hrtime() .

Надявам се това да помогне, горепосочените методи могат да работят, но открих, че това е най-простият подход за нашите нужди в Node.js.

13
29 мая '15 в 16:40 2015-05-29 16:40 отговори на Кевин Лиъри на 29 май '15 в 16:40 2015-05-29 16:40

Научих един наистина готин начин да конвертирате този обект Дата в Unix времеви от JQuery Cookie изходния код на другия ден.

Ето един пример:

 var date = new Date(); var timestamp = +date; 
12
11 марта '15 в 12:52 2015-03-11 12:52 Отговорът е даден от Джордж на 11 март '15 в 12:52 2015-03-11 12:52

Изглежда, че работи.

 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); } }; 
12
09 окт. отговор, даден от Рон Ройстън 09 октомври 2015-10-09 05:03 '15 в 5:03 2015-10-09 05:03

За пода и подчертаване използвайте _.now .

 var timestamp = _.now(); // in milliseconds 
12
30 марта '15 в 11:40 2015-03-30 11:40 отговорът беше даден от Мохамед Реда на 30 март 2009 г. в 11:40 часа 2015-03-30 11:40

Moment.js може да се абстрахира от голямата болка при работа с Javascript дати.

Вижте: http://momentjs.com/docs/#/displaying/unix-timestamp/

 moment().unix(); 
9
06 марта '15 в 3:33 2015-03-06 03:33 отговорът е даден на Rimian 06 март 2006 г. в 3:33 2015-03-06 03:33

По време на това писание първият отговор беше на 9 години и много се промени след това - не на последно място, имаме почти универсална подкрепа за решение, което не е хакер:

 Date.now() 

Ако искате да сте абсолютно сигурни, че няма да се счупи в някой древен (до ie9) браузър, можете да го поставите зад чек, например:

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

Това ще върне милисекунди от времето на ерата, разбира се, не секунди.

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

9
14 дек. Отговорът е даден от Olemak 14 декември. 2017-12-14 13:09 '17 в 13:09 2017-12-14 13:09

по-прост начин:

 var timeStamp=event.timestamp || new Date().getTime(); 
7
26 окт. Отговор, даден от Vicky Gonsalves 26 октомври 2013-10-26 06:51 '13 в 6:51 2013-10-26 06:51

Понякога имам нужда от това в обектите за xmlhttp разговори, така че ми харесва.

 timestamp : parseInt(new Date().getTime()/1000, 10) 
5
24 апр. Отговор DevC 24 Apr. 2014-04-24 09:46 '14 в 9:46 2014-04-24 09:46
  • 1
  • 2

Други въпроси относно tags или Задайте въпрос