Конвертирайте Unix timestamp в javascript

Съхранявам времето в базата данни на MySQL като времеви клон на Unix и изпращам до някой JavaScript код. Как да получа от време на време?

Например във формат HH / MM / SS.

910
11 мая '09 в 11:23 2009-05-11 11:23 roflwaffle на 11 май, 09 в 11:23 ч. 2009-05-11 11:23
@ 26 отговора
 // Create a new JavaScript Date object based on the timestamp // multiplied by 1000 so that the argument is in milliseconds, not seconds. var date = new Date(unix_timestamp*1000); // Hours part from the timestamp var hours = date.getHours(); // Minutes part from the timestamp var minutes = "0" + date.getMinutes(); // Seconds part from the timestamp var seconds = "0" + date.getSeconds(); // Will display time in 10:30:23 format var formattedTime = hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2); 

За повече информация относно обекта Date, вижте MDN или ECMAScript 5 Specification .

1413
11 мая '09 в 11:28 2009-05-11 11:28 отговори на Арон Ротвевел на 11 май 09 11:28 2009-05-11 11:28

border=0
250
21 мая '11 в 3:44 2011-05-21 03:44 отговорът е даден shomrat 21 май '11 в 3:44 2011-05-21 03:44

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

 var date = new Date(UNIX_Timestamp * 1000); // Manipulate JavaScript Date object here... 
152
11 мая '09 в 11:31 2009-05-11 11:31 отговори на Steve Harrison Май 11 '09 в 11:31 2009-05-11 11:31

Аз съм Date.format() за библиотеката на Джейкъб Райт Date.format() , която изпълнява форматирането на датата на JavaScript в стила PHP date() .

 new Date(unix_timestamp * 1000).format('h:i:s') 
74
12 окт. отговор, даден от Брад Коч 12 октомври 2012-10-12 00:02 '12 в 0:02 2012-10-12 00:02

Това е най-краткото едноредово решение за форматиране на секунди като hh:mm:ss :

  function time(s) { return new Date(s * 1e3).toISOString().slice(-13, -5); } console.log( time(12345) ); // "03:25:45" 

Методът Date.prototype.toISOString() връща времето към опростения разширен формат на ISO 8601 винаги 24 или 27 символа (т.е. YYYY-MM-DDTHH:mm:ss.sssZ или ±YYYYYY-MM-DDTHH:mm:ss.sssZ съответно). Часовата зона винаги е с нулева корекция UTC.

Забележка: Това решение не изисква никакви библиотеки на трети страни и се поддържа от всички модерни браузъри и JavaScript механизми.

45
09 марта '16 в 14:37 2016-03-09 14:37 отговорът е даден VisioN 09 март в 14:37 2016-03-09 14:37

Употреба:

 var s = new Date(1504095567183).toLocaleDateString("en-US") // expected output "8/30/2017" 

и за известно време:

 var s = new Date(1504095567183).toLocaleTimeString("en-US") // expected output "3:19:27 PM"' 

виж Date.prototype.toLocaleDateString ()

30
09 мая '18 в 17:04 2018-05-09 17:04 отговорът е даден Дан Алботеану 09 май '18 в 17:04 2018-05-09 17:04

Бих мислил да използвам библиотеката, например, momentjs.com , което го прави много прост:

Въз основа на времевата отметка на Unix:

 var timestamp = moment.unix(1293683278); console.log( timestamp.format("HH/mm/ss") ); 

Въз основа на датата MySQL:

 var now = moment("2010-10-10 12:03:15"); console.log( now.format("HH/mm/ss") ); 
26
11 нояб. отговорът е даден homtg 11 Nov. 2013-11-11 13:30 '13 в 13:30 2013-11-11 13:30

Времевият знак на UNIX е броят на секундите от 00:00:00 UTC на 1 януари 1970 г. (според Уикипедия ).

Аргументът на обекта Date в Javascript е броят на милисекунди от 00:00:00 до UTC на 1 януари 1970 г. (според документацията на Javascript W3Schools ).

Вижте кода по-долу, например:

  function tm(unix_tm) { var dt = new Date(unix_tm*1000); document.writeln(dt.getHours() + '/' + dt.getMinutes() + '/' + dt.getSeconds() + ' -- ' + dt + '<br>'); } tm(60); tm(86400); 

Той предвижда:

 1/1/0 -- Thu Jan 01 1970 01:01:00 GMT+0100 (Central European Standard Time) 1/0/0 -- Fri Jan 02 1970 01:00:00 GMT+0100 (Central European Standard Time) 
20
11 мая '09 в 11:38 2009-05-11 11:38 отговорът е даден от Гжегож Гиерлик 11 май, 09 в 11:38 2009-05-11 11:38

Използвайки Moment.js , можете да получите часа и датата, както следва:

 var dateTimeString = moment(1439198499).format("DD-MM-YYYY HH:mm:ss"); 

И можете да получите само време, използвайки това:

 var timeString = moment(1439198499).format("HH:mm:ss"); 
16
10 авг. отговор, даден от Peter T. 10 Aug. 2015-08-10 14:48 '15 в 14:48 2015-08-10 14:48

Проблемът с горните решения е, че ако час, минута или секунда има само една цифра (т.е. 0-9), времето ще бъде погрешно, например. може да е 2: 3: 9, но трябва да е 02:03:09.

Според тази страница това е най-доброто решение за използване на метода Date toLocaleTimeString.

15
01 нояб. Отговорът е даден от Bernie 01 Nov. 2011-11-01 22:11 '11 в 10:11 ч. 2011-11-01 22:11

Друг метод е от датата на ISO 8601 .

 var timestamp = 1293683278; var date = new Date(timestamp*1000); var iso = date.toISOString().match(/(\d{2}:\d{2}:\d{2})/) alert(iso[1]); 
13
10 мая '12 в 17:24 2012-05-10 17:24 отговорът е даден deadrunk 10 май '12 в 17:24 2012-05-10 17:24

В момента трябва да използвате временния печат на unix:

 var dateTimeString = moment.unix(1466760005).format("DD-MM-YYYY HH:mm:ss"); 
13
24 июня '16 в 12:26 2016-06-24 12:26 отговорът е даден Valix85 24 юни '16 в 12:26 2016-06-24 12:26

Модерно решение, което не се нуждае от библиотека от 40 KB:

Intl.DateTimeFormat е некултивиран империалистичен начин за форматиране на дати / часове.

 // Setup once var options = { //weekday: 'long', //month: 'short', //year: 'numeric', //day: 'numeric', hour: 'numeric', minute: 'numeric', second: 'numeric' }, intlDate = new Intl.DateTimeFormat( undefined, options ); // Reusable formatter var timeStamp = 1412743273; console.log( intlDate.format( new Date( 1000 * timeStamp ) ) ); 
8
08 окт. отговорът е даден от Адрия 2014-10-08 07:41 '14 в 7:41 ч. 2014-10-08 07:41

Въз основа на @shomrat отговора, тук е фрагмент, който автоматично записва датата и часа като тази (малко като датата на StackOverflow за отговорите: answered Nov 6 '16 at 11:51 ):

 today, 11:23 

или

 yersterday, 11:23 

или (ако е различно, но в същата година, отколкото днес)

 6 Nov, 11:23 

или (ако е друга година, отколкото днес)

 6 Nov 2016, 11:23 

 function timeConverter(t) { var a = new Date(t * 1000); var today = new Date(); var yesterday = new Date(Date.now() - 86400000); var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; var year = a.getFullYear(); var month = months[a.getMonth()]; var date = a.getDate(); var hour = a.getHours(); var min = a.getMinutes(); if (a.setHours(0,0,0,0) == today.setHours(0,0,0,0)) return 'today, ' + hour + ':' + min; else if (a.setHours(0,0,0,0) == yesterday.setHours(0,0,0,0)) return 'yesterday, ' + hour + ':' + min; else if (year == today.getFullYear()) return date + ' ' + month + ', ' + hour + ':' + min; else return date + ' ' + month + ' ' + year + ', ' + hour + ':' + min; } 
8
06 нояб. отговорът е даден от Basj 06 Nov. 2016-11-06 14:51 '16 в 14:51 часа 2016-11-06 14:51
 function getTIMESTAMP() { var date = new Date(); var year = date.getFullYear(); var month = ("0"+(date.getMonth()+1)).substr(-2); var day = ("0"+date.getDate()).substr(-2); var hour = ("0"+date.getHours()).substr(-2); var minutes = ("0"+date.getMinutes()).substr(-2); var seconds = ("0"+date.getSeconds()).substr(-2); return year+"-"+month+"-"+day+" "+hour+":"+minutes+":"+seconds; } //2016-01-14 02:40:01 
6
14 янв. отговорът е даден synan54 Jan 14 2016-01-14 03:43 '16 в 3:43 2016-01-14 03:43

Забележете нулевия проблем с някои отговори. Например, клеймото 1439329773 ще бъде погрешно преобразувано в 12/08/2015 0:49 .

Предлагам да използвате следното, за да разрешите този проблем:

 var timestamp = 1439329773; // replace your timestamp var date = new Date(timestamp * 1000); var formattedDate = ('0' + date.getDate()).slice(-2) + '/' + ('0' + (date.getMonth() + 1)).slice(-2) + '/' + date.getFullYear() + ' ' + ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2); console.log(formattedDate); 

Сега резултатите:

 12/08/2015 00:49 
6
12 авг. Отговор, даден от TechWisdom на 12 август 2015-08-12 01:09 '15 в 1:09 2015-08-12 01:09
 // Format value as two digits 0 => 00, 1 => 01 function twoDigits(value) { if(value < 10) { return '0' + value; } return value; } var date = new Date(unix_timestamp*1000); // display in format HH:MM:SS var formattedTime = twoDigits(date.getHours()) + ':' + twoDigits(date.getMinutes()) + ':' + twoDigits(date.getSeconds()); 
5
04 окт. отговорът е даден на Fireblaze 04 oct. 2012-10-04 18:34 '12 в 18:34 2012-10-04 18:34

Можете да използвате следната функция, за да конвертирате времеви отпечатък във формат HH:MM:SS :

 var convertTime = function(timestamp, separator) { var pad = function(input) {return input < 10 ? "0" + input : input;}; var date = timestamp ? new Date(timestamp * 1000) : new Date(); return [ pad(date.getHours()), pad(date.getMinutes()), pad(date.getSeconds()) ].join(typeof separator !== 'undefined' ? separator : ':' ); } 

Без да предава разделител, използва : като разделител (по подразбиране):

 time = convertTime(1061351153); // --> OUTPUT = 05:45:53 

Ако искате да използвате / като разделител, просто го преминете като втори параметър:

 time = convertTime(920535115, '/'); // --> OUTPUT = 09/11/55 

демонстрация

този скрипт . 

4
24 февр. Отговорено от John Slegers на 24 февруари 2017-02-24 15:33 '17 в 15:33 2017-02-24 15:33

Вижте Конвертор за дата / епоха .

Имате нужда от ParseInt , в противен случай няма да работи:


 if (!window.a) window.a = new Date(); var mEpoch = parseInt(UNIX_timestamp); if (mEpoch < 10000000000) mEpoch *= 1000; ------ a.setTime(mEpoch); var year = a.getFullYear(); ... return time; 
4
16 февр. отговорът е даден на 16 февруари . 2012-02-16 17:45 '12 в 17:45 ч. 2012-02-16 17:45

Времето ми се извлича от PHP бекенда. Опитах всички методи по-горе и не работи. Тогава се натъкнах на учебник, който работеше:

 var d =val.timestamp; var date=new Date(+d); //NB: use + before variable name console.log(d); console.log(date.toDateString()); console.log(date.getFullYear()); console.log(date.getMinutes()); console.log(date.getSeconds()); console.log(date.getHours()); console.log(date.toLocaleTimeString()); 

горните методи ще доведат до тези резултати

 1541415288860 Mon Nov 05 2018 2018 54 48 13 1:54:48 PM 

Има много методи, които работят чудесно с времеви печати. Не мога да ги изброя всички

3
05 нояб. отговор, даден от Джеймс Асо 05 Nov. 2018-11-05 16:25 '18 в 16:25 ч. 2018-11-05 16:25
 function timeConverter(UNIX_timestamp){ var a = new Date(UNIX_timestamp*1000); var hour = a.getUTCHours(); var min = a.getUTCMinutes(); var sec = a.getUTCSeconds(); var time = hour+':'+min+':'+sec ; return time; } 
2
21 мая '11 в 3:54 2011-05-21 03:54 отговорът е даден shomrat 21 май, '11 в 3:54 2011-05-21 03:54
  function getDateTimeFromTimestamp(unixTimeStamp) { var date = new Date(unixTimeStamp); return ('0' + date.getDate()).slice(-2) + '/' + ('0' + (date.getMonth() + 1)).slice(-2) + '/' + date.getFullYear() + ' ' + ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2); } var myTime = getDateTimeFromTimestamp(1435986900000); console.log(myTime); // output 01/05/2000 11:00 
2
04 июля '17 в 9:59 2017-07-04 09:59 отговорът е даден от Ashish Gupta на 04 юли 2006 г. в 9:59 2017-07-04 09:59

Ако искате да преобразувате Unix времето в реални часове, минути и секунди, можете да използвате следния код:

 var hours = Math.floor(timestamp / 60 / 60); var minutes = Math.floor((timestamp - hours * 60 * 60) / 60); var seconds = Math.floor(timestamp - hours * 60 * 60 - minutes * 60 ); var duration = hours + ':' + minutes + ':' + seconds; 
2
14 марта '14 в 18:23 2014-03-14 18:23 отговорът е даден от милковски на 14 март 14 в 18:23 2014-03-14 18:23
 function getDateTime(unixTimeStamp) { var d = new Date(unixTimeStamp); var h = (d.getHours().toString().length == 1) ? ('0' + d.getHours()) : d.getHours(); var m = (d.getMinutes().toString().length == 1) ? ('0' + d.getMinutes()) : d.getMinutes(); var s = (d.getSeconds().toString().length == 1) ? ('0' + d.getSeconds()) : d.getSeconds(); var time = h + '/' + m + '/' + s; return time; } var myTime = getDateTime(1435986900000); console.log(myTime); // output 01/15/00 
1
30 июня '15 в 17:10 2015-06-30 17:10 отговорът е даден от Бхаумик Мехта на 30 юни 2005 г. в 17:10 ч. 2015-06-30 17:10

Кодът по-долу съдържа и трицифрени милисекунди, идеални за префиксите на конзолните журнали:

най-краткото едноредово решение за форматиране на секунди във формат hh: mm: ss: опция:

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