Konvertuoti Unix laiko žymą į javascript

Aš laikau laiką „MySQL“ duomenų bazėje kaip „Unix“ laiko žymą ir išsiunčiame kai kuriems „JavaScript“ kodams. Kaip gauti laikas nuo laiko?

Pavyzdžiui, formatu HH / MM / SS.

910
11 мая '09 в 11:23 2009-05-11 11:23 roflwaffle nustatytas gegužės 11 d., 09:23 val. 2009-05-11 11:23
@ 26 atsakymai
 // 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); 

Daugiau informacijos apie datos objektą žr. MDN arba ECMAScript 5 specifikacijoje .

1413
11 мая '09 в 11:28 2009-05-11 11:28 atsakė Aron Rotteveel'ui gegužės 09 d. 11:28 2009-05-11 11:28

250
21 мая '11 в 3:44 2011-05-21 03:44 Atsakymas suteikiamas shomrat gegužės 21 d., 11 val. 03:44 2011-05-21 03:44

„JavaScript“ veikia milisekundėmis, todėl pirmiausia turite konvertuoti UNIX laiko žymę nuo sekundžių iki milisekundžių.

 var date = new Date(UNIX_Timestamp * 1000); // Manipulate JavaScript Date object here... 
152
11 мая '09 в 11:31 2009-05-11 11:31 atsakė Steve Harrison gegužės 11 d. 09:31 2009-05-11 11:31

Aš esu Date.format() dėl Jacob Wright Date.format() bibliotekos, kuri įgyvendina JavaScript datos formatavimą PHP date() stiliuje.

 new Date(unix_timestamp * 1000).format('h:i:s') 
74
12 окт. atsakymas, kurį pateikė Brad Koch, spalio 12 d 2012-10-12 00:02 '12 0:02 2012-10-12 00:02

Čia pateikiamas trumpiausias vienos eilutės sprendimas, skirtas formuoti sekundes kaip 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() metodas grąžina laiką iki supaprastinto ISO 8601 išplėstinio formato, visada 24 arba 27 simbolių (t. Y. YYYY-MM-DDTHH:mm:ss.sssZ arba ±YYYYYY-MM-DDTHH:mm:ss.sssZ ). Laiko juosta visada yra lygi nuliui UTC.

NB: Šiam sprendimui nereikia jokių trečiųjų šalių bibliotekų ir yra palaikomas visose moderniose naršyklėse ir „JavaScript“ mechanizmuose.

45
09 марта '16 в 14:37 2016-03-09 14:37 atsakymas pateikiamas „ VisioN“ kovo 09–16 d. 14:37 2016-03-09 14:37

Naudoti:

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

ir kurį laiką:

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

žr. Date.prototype.toLocaleDateString ()

30
09 мая '18 в 17:04 2018-05-09 17:04 atsakymas duotas Dan Alboteanu 09 gegužės 18 d. 17:04 2018-05-09 17:04

Aš galvoju apie bibliotekos naudojimą, pavyzdžiui, momentjs.com , todėl jis labai paprastas:

Remiantis Unix laiko žyma:

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

Remiantis MySQL datos eilute:

 var now = moment("2010-10-10 12:03:15"); console.log( now.format("HH/mm/ss") ); 
26
11 нояб. atsakymas pateikiamas lapkričio 11 d. 2013-11-11 13:30 '13, 13:30, 2013-11-11 13:30

UNIX laiko žyma - tai sekundžių skaičius nuo 1970 m. Sausio 1 d. 00:00:00 UTC (pagal Vikipediją ).

„Date“ objekto argumentas „Javascript“ yra milisekundžių skaičius nuo 00:00:00 iki UTC 1970 m. Sausio 1 d. (Pagal „ Javascript W3Schools“ dokumentaciją ).

Žr. Toliau pateiktą kodą, pavyzdžiui:

  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); 

suteikia:

 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 atsakymą pateikė Grzegorz Gierlik gegužės 11 d., 09:38 , 2009-05-11 11:38

Naudodami „ Moment.js“ , galite gauti laiką ir datą taip:

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

Ir jūs galite gauti tik laiką naudodami:

 var timeString = moment(1439198499).format("HH:mm:ss"); 
16
10 авг. Petro T. atsakymas. 2015-08-10 14:48 '15 - 14:48 2015-08-10 14:48

Problema, susijusi su pirmiau pateiktais sprendimais, yra ta, kad jei valandą, minutę ar antrą kartą yra tik vienas skaitmuo (ty 0-9), laikas, pavyzdžiui, bus neteisingas. tai gali būti 2: 3: 9, bet tai turėtų būti 02:03:09.

Pagal šį puslapį tai yra geriausias sprendimas naudojant „Date toLocaleTimeString“ metodą.

15
01 нояб. Atsakymą pateikė Bernie 01 lapkričio. 2011-11-01 22:11 '11, 10:11 pm 2011-11-01 22:11

Kitas metodas yra nuo ISO 8601 datos.

 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 Atsakymas duotas mirusiam gegužės 10 d. 12 val. 17:24 2012-05-10 17:24

Šiuo metu turėtumėte naudoti „Unix“ laiko žymą:

 var dateTimeString = moment.unix(1466760005).format("DD-MM-YYYY HH:mm:ss"); 
13
24 июня '16 в 12:26 2016-06-24 12:26 atsakymas pateikiamas Valix85 birželio 24 d., 16 d., 12:26, 2016-06-24 12:26

Šiuolaikiškas sprendimas, kuriam nereikia 40 KB bibliotekos:

Intl.DateTimeFormat yra nekultūrinis imperialistinis datos ir laikų formatavimo būdas.

 // 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 окт. atsakymas duotas Adria 08 okt. 2014-10-08 07:41 '14, 7:41 am 2014-10-08 07:41

Remiantis „@shomrat“ atsakymu, čia yra fragmentas, kuris automatiškai įrašo tokią datą ir laiką (panašiai kaip „StackOverflow“ datos atsakymams: answered Nov 6 '16 at 11:51 ):

 today, 11:23 

arba

 yersterday, 11:23 

arba (jei skiriasi, bet tais pačiais metais nei šiandien)

 6 Nov, 11:23 

arba (jei dar vienas metai nei šiandien)

 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 нояб. atsakymą pateikė Basj 06 Nov. 2016-11-06 14:51 '16 at 14:51 pm 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 янв. atsakymas pateikiamas sinan54 Jan 14 2016-01-14 03:43 '16 at 3:43 2016-01-14 03:43

Atkreipkite dėmesį į nulinę problemą kai kuriais atsakymais. Pavyzdžiui, laiko žyma 1439329773 bus klaidingai konvertuojama į 1439329773 12/08/2015 0:49 .

Norėčiau išspręsti šią problemą naudodama šiuos veiksmus:

 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); 

Dabar rezultatai:

 12/08/2015 00:49 
6
12 авг. „ TechWisdom“ atsakymas rugpjūčio 12 d 2015-08-12 01:09 '15 - 01: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 окт. atsakymas pateikiamas Fireblaze 04 okt. 2012-10-04 18:34 '12, 18:34, 2012-10-04 18:34

Galite konvertuoti laiko žymę į HH:MM:SS formatu:

 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 : ':' ); } 

Neišsiuntęs separatoriaus, jis naudoja : kaip atskiriklį (pagal numatytuosius nustatymus):

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

Jei norite naudoti / kaip ribotuvą, tiesiog perduokite jį kaip antrąjį parametrą:

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

Demo

šį scenarijų . 

4
24 февр. John Slegers atsakė vasario 24 d 2017-02-24 15:33 '17, 15:33 2017-02-24 15:33

Žr. Data / Epoch Converter .

Jums reikia ParseInt , kitaip jis neveiks:


 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 февр. atsakymas pateikiamas 16 vasario mėn . 2012-02-16 17:45 „12, 12:45 pm 2012-02-16 17:45

Mano laiko žyma gaunama iš PHP backend. Bandžiau visus aukščiau aprašytus metodus ir jis neveikė. Tada aš atėjau į vadovėlį, kuris dirbo:

 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()); 

aukščiau nurodyti metodai padės pasiekti šiuos rezultatus

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

Yra daug metodų, kurie puikiai veikia su laiko žyma. Aš negaliu jų išvardyti

3
05 нояб. atsakymą pateikė Jamesas Ace . 2018-11-05 16:25 '18 at 4:25 pm 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 Atsakymas duotas Shomrat Gegužės 21 d., 11 d., 03: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 atsakymą pateikė Ashish Gupta liepos 17 d. 17 val. 9:59 2017-07-04 09:59

Jei norite Unix laiką paversti realiomis valandomis, minutėmis ir sekundėmis, galite naudoti šį kodą:

 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 atsakymą pateikė pienovskis 14 d. 14 d. 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 atsakymą pateikė Bhaumik Mehta birželio 15 d. 15 val. 17:10 2015-06-30 17:10

Toliau pateiktame kode taip pat yra 3 skaitmenų milisekundės, idealiai tinka konsolės žurnalo prefiksams:

trumpiausias vienos eilutės sprendimas, skirtas formuoti sekundes formatu hh: mm: ss: parinktis: