Tôi đang lưu trữ thời gian trong cơ sở dữ liệu MySQL dưới dạng dấu thời gian Unix và được gửi đến một số mã JavaScript. Làm thế nào tôi có thể nhận được thời gian ra khỏi nó?
Ví dụ, ở định dạng HH / MM / SS.
Tôi đang lưu trữ thời gian trong cơ sở dữ liệu MySQL dưới dạng dấu thời gian Unix và được gửi đến một số mã JavaScript. Làm thế nào tôi có thể nhận được thời gian ra khỏi nó?
Ví dụ, ở định dạng HH / MM / SS.
Câu trả lời:
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);
Để biết thêm thông tin về đối tượng Ngày, vui lòng tham khảo MDN hoặc đặc tả 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()
trả về số tháng trong khoảng từ 0 đến 11, do đó a.getMonth() - 1
là sai.
JavaScript hoạt động theo mili giây, do đó trước tiên bạn sẽ phải chuyển đổi dấu thời gian UNIX từ giây sang mili giây.
var date = new Date(UNIX_Timestamp * 1000);
// Manipulate JavaScript Date object here...
Tôi là một phần của Date.format()
thư viện của Jacob Wright , nơi thực hiện định dạng ngày JavaScript theo kiểu hàm của PHP date()
.
new Date(unix_timestamp * 1000).format('h:i:s')
format is not a function
. Nhưng điều này rõ ràng có tác dụng: stackoverflow.com/a
Sử dụng:
var s = new Date(1504095567183).toLocaleDateString("en-US")
console.log(s)
// expected output "8/30/2017"
và cho thời gian:
var s = new Date(1504095567183).toLocaleTimeString("en-US")
console.log(s)
// expected output "3:19:27 PM"
toLocaleString
bao gồm cả ngày và thời gian.
Đây là giải pháp một lớp lót ngắn nhất để định dạng giây như 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"
Phương thức
Date.prototype.toISOString()
trả về thời gian ở định dạng ISO 8601 mở rộng được đơn giản hóa , luôn dài 24 hoặc 27 ký tự (tức làYYYY-MM-DDTHH:mm:ss.sssZ
hoặc±YYYYYY-MM-DDTHH:mm:ss.sssZ
tương ứng). Múi giờ luôn luôn bù UTC.
Lưu ý: Giải pháp này không yêu cầu bất kỳ thư viện của bên thứ ba nào và được hỗ trợ trong tất cả các trình duyệt và công cụ JavaScript hiện đại.
toTimeString
đã không làm việc tốt với múi giờ. Thật không may, chỉnh sửa của bạn đã bị từ chối trước khi tôi nhìn thấy nó. Tuy nhiên, tôi khuyên bạn nên sử dụng toISOString
thay thế, vì toGMTString
không dùng nữa và có thể trả về các kết quả khác nhau trên các nền tảng khác nhau.
Tôi nghĩ về việc sử dụng một thư viện như Momentjs.com , điều này thực sự đơn giản:
Dựa trên dấu thời gian Unix:
var timestamp = moment.unix(1293683278);
console.log( timestamp.format("HH/mm/ss") );
Dựa trên chuỗi ngày của MySQL:
var now = moment("2010-10-10 12:03:15");
console.log( now.format("HH/mm/ss") );
console.log
ví dụ của bạn , tôi đã nhầm lẫn về định dạng do /
, nhưng nó đã giúp tôi rất nhiều.
Dấu thời gian UNIX là số giây kể từ 00:00:00 UTC ngày 1 tháng 1 năm 1970 (theo Wikipedia ).
Đối số của đối tượng Date trong Javascript là số milisecond kể từ 00:00:00 UTC ngày 1 tháng 1 năm 1970 (theo tài liệu Javascript của W3Schools ).
Xem mã dưới đây ví dụ:
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);
cho:
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)
giải pháp một lớp lót ngắn nhất để định dạng giây như hh: mm: ss: biến thể:
console.log(new Date(1549312452 * 1000).toISOString().slice(0, 19).replace('T', ' '));
// "2019-02-04 20:34:12"
Sử dụng Moment.js , bạn có thể nhận được thời gian và ngày như thế này:
var dateTimeString = moment(1439198499).format("DD-MM-YYYY HH:mm:ss");
Và bạn chỉ có thể có thời gian sử dụng điều này:
var timeString = moment(1439198499).format("HH:mm:ss");
Vấn đề với các giải pháp đã nói ở trên là, nếu giờ, phút hoặc giây, chỉ có một chữ số (tức là 0-9), thì thời gian sẽ sai, ví dụ: có thể là 2: 3: 9, nhưng đúng hơn là 02: 03:09.
Theo trang này , có vẻ như là một giải pháp tốt hơn để sử dụng phương thức "toLocaleTimeString" của Date.
date.toLocaleTimeString()
toTimeString
phương pháp. Kiểm tra tại đây: stackoverflow.com/a/35890537/1249581 .
Một cách khác - từ ngày 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]);
Dựa trên câu trả lời của @ shomrat, đây là đoạn trích tự động ghi datetime như thế này (hơi giống với ngày của StackOverflow để trả lời answered Nov 6 '16 at 11:51
:):
today, 11:23
hoặc là
yersterday, 11:23
hoặc (nếu khác nhưng cùng năm so với ngày hôm nay)
6 Nov, 11:23
hoặc (nếu một năm nữa so với hôm nay)
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;
}
Giải pháp hiện đại không cần thư viện 40 KB:
Intl.DateTimeFormat là cách phi văn hóa phi văn hóa để định dạng ngày / giờ.
// 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 ) ) );
Dấu thời gian của tôi đang được tìm nạp từ phụ trợ PHP. Tôi đã thử tất cả các phương pháp trên và nó không hoạt động. Sau đó tôi đã bắt gặp một hướng dẫn có hiệu quả:
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());
các phương pháp trên sẽ tạo ra kết quả này
1541415288860
Mon Nov 05 2018
2018
54
48
13
1:54:48 PM
Có một loạt các phương pháp hoạt động hoàn hảo với dấu thời gian. Không thể liệt kê tất cả
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
Hãy chú ý đến vấn đề không với một số câu trả lời. Ví dụ: dấu thời gian 1439329773
sẽ bị chuyển đổi nhầm thành12/08/2015 0:49
.
Tôi sẽ đề nghị sử dụng những điều sau đây để khắc phục vấn đề này:
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);
Bây giờ kết quả trong:
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());
Xem bộ chuyển đổi ngày / kỷ nguyên .
Bạn cần ParseInt
, nếu không nó sẽ không hoạt động:
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;
Bạn có thể sử dụng chức năng sau để chuyển đổi dấu thời gian của mình sang HH:MM:SS
định dạng:
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 : ':' );
}
Không vượt qua dấu phân cách, nó sử dụng :
như dấu phân cách (mặc định):
time = convertTime(1061351153); // --> OUTPUT = 05:45:53
Nếu bạn muốn sử dụng /
như một dấu phân cách, chỉ cần chuyển nó làm tham số thứ hai:
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>';
Xem thêm Fiddle này .
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
Nếu bạn muốn chuyển đổi thời lượng Unix thành giờ, phút và giây thực, bạn có thể sử dụng mã sau:
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
Mã dưới đây cũng cung cấp millisec 3 chữ số, lý tưởng cho tiền tố nhật ký giao diện điều khiển:
const timeStrGet = date => {
const milliSecsStr = date.getMilliseconds().toString().padStart(3, '0') ;
return `${date.toLocaleTimeString('it-US')}.${milliSecsStr}`;
};
setInterval(() => console.log(timeStrGet(new Date())), 299);
chuyển đổi dấu thời gian thành chuỗi ngày trong 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
Câu trả lời được đưa ra bởi @Aron hoạt động, nhưng nó không hiệu quả với tôi khi tôi đang cố gắng chuyển đổi dấu thời gian bắt đầu từ năm 1980. Vì vậy, tôi đã thực hiện một vài thay đổi như sau
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);
Vì vậy, nếu bạn có dấu thời gian bắt đầu từ một thập kỷ khác hoặc lâu hơn, chỉ cần sử dụng cái này. Nó tiết kiệm rất nhiều đau đầu cho tôi.