JavaScript将秒转换为日期对象

52

我如何在javascript中将秒转换为日期时间对象。

示例:

1.3308313703571

1.6324722385401

这些是一系列事件发生的时间。虽然我知道1.23323代表的不是秒,但我不能更改从API获取的值。


这些浮点数代表什么类型的日期时间? - deceze
这些是一系列从零开始的秒数。它只是一系列由它们发生的时间表示的点。 - jhanifen
2
我认为我们在这里遇到的问题是,您想要转换的示例没有意义。那是不是应该是从某个特定时间点开始的秒数(1970年1月1日后的1.3秒)? - Alex Vidal
6个回答

99
您可以尝试以下方法:

您可以像这样尝试:

function toDateTime(secs) {
    var t = new Date(1970, 0, 1); // Epoch
    t.setSeconds(secs);
    return t;
}

关于历元日期的信息。


7
在我的情况下,这个答案并没有给出正确的答案,因为时区信息似乎很奇怪。我尝试了@ariscris的解决方案,将“t.setSeconds(secs);”更改为“t.setTime(secs * 1000)”可以给我正确的结果。 - hengyue li
1
这个解决方案会受到系统时区的影响,new Date(1970, 0, 1).toISOString() 输出 1969-12-31T21:00:00.000Z(在我的情况下是 GMT+0300)。setSeconds 也被认为是在本地时间中,并且即使基准日期实际上是正确的 UTC 纪元开始,它也不会给出预期的结果。 - Klesun
4
new Date(0)将日期设置为1970年1月1日,本地时间。 因此,如果secs是UTC时间戳(通常由服务器发送),则t.setSeconds(secs)会在本地时间中获取当前时间。这样做非常完美。 - Dark Matter

80
您可以将 Unix 时间戳(毫秒)作为参数传递给 Date 构造函数:

const secs = 30;
const output = new Date(secs * 1000);

console.log(output);


3
这个答案更加简洁! - Lafi
1
在我的情况下,它会添加额外的2小时时区偏移。 - Niki

6

@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 等库将其转换/格式化为本地时区。


3

我不知道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


1
这个问题似乎已经有了答案,但对于那些试图做与 Ruby 的 Time.at() 方法类似的事情的人可能会有所帮助。
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];
};

1
你的示例值有小数点,看起来你试图将1.几秒转换为日期。
同时,检查这个示例here中的正确的秒转日期转换示例。你可以查看他们的js源代码。

4
谢谢,这个有效。下面是代码: var d = new Date(); d.setTime(secs * 1000); (翻译说明:按要求进行了翻译,并将原文中的“code”译成了“代码”。) - ariscris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接