it-swarm.dev

Konversikan cap waktu Unix ke waktu dalam JavaScript

Saya menyimpan waktu dalam database MySQL sebagai cap waktu Unix dan itu akan dikirim ke beberapa kode JavaScript. Bagaimana saya bisa mendapatkan waktu keluar dari itu?

Misalnya, dalam format HH/MM/SS.

915
roflwaffle
// 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);

Untuk informasi lebih lanjut mengenai objek Date, silakan merujuk ke MDN atau spesifikasi ECMAScript 5 .

1424
Aron Rotteveel

function timeConverter(UNIX_timestamp){
  var a = new Date(UNIX_timestamp * 1000);
  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();
  var sec = a.getSeconds();
  var time = date + ' ' + month + ' ' + year + ' ' + hour + ':' + min + ':' + sec ;
  return time;
}
console.log(timeConverter(0));

251
shomrat

JavaScript berfungsi dalam milidetik, jadi pertama-tama Anda harus mengubah cap waktu UNIX dari detik menjadi milidetik.

var date = new Date(UNIX_Timestamp * 1000);
// Manipulate JavaScript Date object here...
154
Steve Harrison

Saya sebagian dari pustaka Date.format() Jacob Wright, yang mengimplementasikan format tanggal JavaScript dengan gaya fungsi date() PHP.

new Date(unix_timestamp * 1000).format('h:i:s')
73
Brad Koch

Berikut ini adalah solusi satu-liner terpendek untuk memformat detik sebagai hh:mm:ss:

/**
 * Convert seconds to time string (hh:mm:ss).
 *
 * @param Number s
 *
 * @return String
 */
function time(s) {
    return new Date(s * 1e3).toISOString().slice(-13, -5);
}

console.log( time(12345) );  // "03:25:45"

Metode Date.prototype.toISOString() mengembalikan waktu dalam diperpanjang ISO 8601 format yang disederhanakan, yang merupakan selalu 24 atau 27 karakter (yaitu YYYY-MM-DDTHH:mm:ss.sssZ atau ±YYYYYY-MM-DDTHH:mm:ss.sssZ masing-masing). Zona waktu selalu offset nol UTC.

N.B .: Solusi ini tidak memerlukan perpustakaan pihak ketiga dan didukung di semua browser modern dan mesin JavaScript.

45
VisioN

Menggunakan:

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

dan untuk waktu:

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

lihat Date.prototype.toLocaleDateString ()

30
Dan Alboteanu

Saya akan berpikir tentang menggunakan perpustakaan seperti momentjs.com , yang membuat ini sangat sederhana:

Berdasarkan cap waktu Unix:

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

Berdasarkan pada string tanggal MySQL:

var now = moment("2010-10-10 12:03:15");
console.log( now.format("HH/mm/ss") );
26
homtg

Cap waktu UNIX adalah jumlah detik sejak 00:00:00 UTC pada tanggal 1 Januari 1970 (menurut Wikipedia ).

Objek Argumen Tanggal dalam Javascript adalah jumlah milidetik sejak 00:00:00 UTC pada 1 Januari 1970 (menurut dokumentasi Javascript W3Schools ).

Lihat kode di bawah ini misalnya:

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

memberi:

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
Grzegorz Gierlik

Menggunakan Moment.js , Anda bisa mendapatkan waktu dan tanggal seperti ini:

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

Dan Anda hanya bisa mendapatkan waktu menggunakan ini:

var timeString = moment(1439198499).format("HH:mm:ss");
16
Peter T.

Masalah dengan solusi yang disebutkan di atas adalah, bahwa jika jam, menit atau detik, hanya memiliki satu digit (mis. 0-9), waktunya akan salah, mis. bisa jadi 2: 3: 9, tetapi seharusnya lebih 02:03:09.

Menurut halaman ini sepertinya ini adalah solusi yang lebih baik untuk menggunakan metode "toLocaleTimeString" Date.

15
Bernie

Saat ini Anda harus menggunakan cap waktu unix:

var dateTimeString = moment.unix(1466760005).format("DD-MM-YYYY HH:mm:ss");
13
Valix85

Cara lain - dari ISO 8601 date.

var timestamp = 1293683278;
var date = new Date(timestamp*1000);
var iso = date.toISOString().match(/(\d{2}:\d{2}:\d{2})/)
alert(iso[1]);
13
deadrunk

Berdasarkan jawaban @ shomrat, berikut adalah cuplikan yang secara otomatis menulis datetime seperti ini (sedikit mirip dengan tanggal StackOverflow untuk jawaban: answered Nov 6 '16 at 11:51):

today, 11:23

atau

yersterday, 11:23

atau (jika tahun berbeda tetapi sama dari hari ini)

6 Nov, 11:23

atau (jika satu tahun dari hari ini)

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;
}
9
Basj

Solusi modern yang tidak membutuhkan perpustakaan 40 KB:

Intl.DateTimeFormat adalah cara imperialistik non-budaya untuk memformat tanggal/waktu.

// 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
Adria
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
synan54

Perhatikan nol masalah dengan beberapa jawaban. Misalnya, stempel waktu 1439329773 akan keliru dikonversi menjadi 12/08/2015 0:49.

Saya menyarankan untuk menggunakan yang berikut ini untuk mengatasi masalah ini:

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

Sekarang menghasilkan:

12/08/2015 00:49
6
TechWisdom
// 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
Fireblaze

Lihat Tanggal/Konverter Zaman.

Anda perlu ParseInt, jika tidak maka tidak akan berfungsi:


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
shams

Anda dapat menggunakan fungsi berikut untuk mengubah stempel waktu Anda ke format 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 : ':' );
}

Tanpa melewati pemisah, ia menggunakan : sebagai pemisah (default):

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

Jika Anda ingin menggunakan / sebagai pemisah, cukup berikan sebagai parameter kedua:

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

Demo

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

document.body.innerHTML = '<pre>' + JSON.stringify({
    920535115 : convertTime(920535115, '/'),
    1061351153 : convertTime(1061351153, ':'),
    1435651350 : convertTime(1435651350, '-'),
    1487938926 : convertTime(1487938926),
    1555135551 : convertTime(1555135551, '.')
}, null, '\t') +  '</pre>';

Lihat juga this Fiddle .

4
John Slegers

Stempel waktu saya diambil dari backend PHP. Saya mencoba semua metode di atas dan tidak berhasil. Saya kemudian menemukan tutorial yang berhasil:

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

metode di atas akan menghasilkan hasil ini

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

Ada banyak metode yang bekerja sempurna dengan cap waktu. Tidak bisa mendaftar semuanya

3
james ace
 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
Ashish Gupta
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
shomrat

Jika Anda ingin mengonversi durasi waktu Unix menjadi jam nyata, menit, dan detik, Anda bisa menggunakan kode berikut:

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
milkovsky
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
Bhaumik Mehta

Kode di bawah ini juga menyediakan milisec 3 digit, ideal untuk awalan log konsol:

const timeStrGet = date => {
    const milliSecsStr = date.getMilliseconds().toString().padStart(3, '0') ;
    return `${date.toLocaleTimeString('it-US')}.${milliSecsStr}`;
};

setInterval(() => console.log(timeStrGet(new Date())), 299);

0
tivoni

solusi satu liner terpendek untuk memformat detik sebagai jj: mm: dd: varian:

console.log(new Date(1549312452 * 1000).toISOString().slice(0, 19).replace('T', ' '));
// "2019-02-04 20:34:12"

0
Luis David