我如何在javascript中将秒转换为日期时间对象。
示例:
1.3308313703571
1.6324722385401
这些是一系列事件发生的时间。虽然我知道1.23323代表的不是秒,但我不能更改从API获取的值。
我如何在javascript中将秒转换为日期时间对象。
示例:
1.3308313703571
1.6324722385401
这些是一系列事件发生的时间。虽然我知道1.23323代表的不是秒,但我不能更改从API获取的值。
您可以像这样尝试:
function toDateTime(secs) {
var t = new Date(1970, 0, 1); // Epoch
t.setSeconds(secs);
return t;
}
关于历元日期的信息。
new Date(1970, 0, 1).toISOString()
输出 1969-12-31T21:00:00.000Z
(在我的情况下是 GMT+0300)。setSeconds 也被认为是在本地时间中,并且即使基准日期实际上是正确的 UTC 纪元开始,它也不会给出预期的结果。 - Klesunnew Date(0)
将日期设置为1970年1月1日,本地时间。 因此,如果secs
是UTC时间戳(通常由服务器发送),则t.setSeconds(secs)
会在本地时间中获取当前时间。这样做非常完美。 - Dark Matterconst secs = 30;
const output = new Date(secs * 1000);
console.log(output);
@UVM的回答很有帮助,但是如果涉及到时区(即UTC时间与本地时间),则略显不完整。在处理时区问题时,应该先使用Date.UTC来获取真正的UTC日期和时间,然后使用Date.setUTCSeconds进行设置。
function toDateTime(secs) {
var t = new Date(Date.UTC(1970, 0, 1)); // Epoch
t.setUTCSeconds(secs);
return t;
}
您可以使用 Moment 等库将其转换/格式化为本地时区。
我不知道10年前的情况,但现在只需执行以下操作即可解决:
let sec = 1628618888939
let time = new Date(sec)
let normalDate = new Date(sec).toLocaleString('en-GB',{timeZone:'UTC'})
time: "Tue Aug 10 2021 21:08:08 GMT+0300 (Eastern European Summer Time)"
normalDate: "10/08/2021, 18:08:08"
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString
function formatDateTime(input){
var epoch = new Date(0);
epoch.setSeconds(parseInt(input));
var date = epoch.toISOString();
date = date.replace('T', ' ');
return date.split('.')[0].split(' ')[0] + ' ' + epoch.toLocaleTimeString().split(' ')[0];
};
var d = new Date(); d.setTime(secs * 1000);
(翻译说明:按要求进行了翻译,并将原文中的“code”译成了“代码”。) - ariscris