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.
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.
Jawaban:
let unix_timestamp = 1549312452
// 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);
console.log(formattedTime);
Untuk informasi lebih lanjut mengenai objek Date, silakan merujuk ke MDN atau spesifikasi ECMAScript 5 .
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));
var min = a.getMinutes() < 10 ? '0' + a.getMinutes() : a.getMinutes(); var sec = a.getSeconds() < 10 ? '0' + a.getSeconds() : a.getSeconds();
getMonth()
mengembalikan angka bulan antara 0 dan 11, dengan demikian a.getMonth() - 1
salah.
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...
Saya sebagian ke Date.format()
perpustakaan Jacob Wright , yang mengimplementasikan format tanggal JavaScript dengan gaya date()
fungsi PHP .
new Date(unix_timestamp * 1000).format('h:i:s')
format is not a function
. Tapi ini tampaknya berhasil: stackoverflow.com/a/34015511/7550772
Menggunakan:
var s = new Date(1504095567183).toLocaleDateString("en-US")
console.log(s)
// expected output "8/30/2017"
dan untuk waktu:
var s = new Date(1504095567183).toLocaleTimeString("en-US")
console.log(s)
// expected output "3:19:27 PM"
toLocaleString
sertakan tanggal dan waktu.
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 format ISO 8601 diperpanjang yang disederhanakan , yang selalu sepanjang 24 atau 27 karakter (yaituYYYY-MM-DDTHH:mm:ss.sssZ
atau±YYYYYY-MM-DDTHH:mm:ss.sssZ
masing - masing). Zona waktu selalu nol offset UTC.
NB: Solusi ini tidak memerlukan perpustakaan pihak ketiga dan didukung di semua browser modern dan mesin JavaScript.
toTimeString
tidak bekerja dengan baik dengan zona waktu. Sayangnya hasil edit Anda ditolak sebelum saya melihatnya. Namun, saya menyarankan untuk menggunakannya toISOString
sebagai gantinya, karena toGMTString
sudah usang dan dapat mengembalikan hasil yang berbeda pada platform yang berbeda.
Saya akan berpikir tentang menggunakan perpustakaan seperti momentjs.com , yang membuatnya 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") );
console.log
contoh Anda , saya bingung tentang format karena /
, tapi itu banyak membantu saya.
Stempel waktu UNIX adalah jumlah detik sejak 00:00:00 UTC pada 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)
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"
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");
Masalah dengan solusi yang disebutkan di atas adalah, bahwa jika jam, menit atau detik, hanya memiliki satu digit (yaitu 0-9), waktunya akan salah, misalnya bisa 2: 3: 9, tetapi seharusnya lebih dari 02: 03:09.
Menurut halaman ini, tampaknya ini merupakan solusi yang lebih baik untuk menggunakan metode "toLocaleTimeString" Date.
date.toLocaleTimeString()
toTimeString
metode. Periksa di sini: stackoverflow.com/a/35890537/1249581 .
Cara lain - dari tanggal 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]);
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;
}
Solusi modern yang tidak memerlukan 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 ) ) );
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
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
Perhatikan nol masalah dengan beberapa jawaban. Misalnya, stempel waktu 1439329773
akan secara keliru dikonversi ke12/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
// 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());
Lihat Date / Epoch Converter .
Anda perlu ParseInt
, jika tidak, tidak akan berhasil:
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;
Anda dapat menggunakan fungsi berikut untuk mengubah cap waktu Anda menjadi HH:MM:SS
format:
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 digunakan :
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
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 Fiddle ini .
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
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;
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
Kode di bawah ini juga menyediakan milidetik 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);
mengonversi stempel waktu ke string tanggal dalam js
moment().format('YYYY-MM-DD hh:mm:ss');
// "2020-01-10 11:55:43"
moment(1578478211000).format('YYYY-MM-DD hh:mm:ss');
// "2020-01-08 06:10:11"
day.js
github.com/iamkun/dayjs
Jawaban yang diberikan oleh @Aron berfungsi, tetapi tidak berhasil bagi saya karena saya mencoba mengubah stempel waktu mulai dari tahun 1980. Jadi saya membuat beberapa perubahan sebagai berikut
function ConvertUnixTimeToDateForLeap(UNIX_Timestamp) {
var dateObj = new Date(1980, 0, 1, 0, 0, 0, 0);
dateObj.setSeconds(dateObj.getSeconds() + UNIX_Timestamp);
return dateObj;
}
document.body.innerHTML = 'TimeStamp : ' + ConvertUnixTimeToDateForLeap(1269700200);
Jadi, jika Anda memiliki cap waktu mulai dari satu dekade atau lebih, gunakan saja ini. Ini menyelamatkan banyak sakit kepala bagi saya.