如何将毫秒转换为日期对象?

问题描述 投票:0回答:1

我正在尝试创建一个与 getTime() 实际上相反的函数;它需要一些毫秒作为输入,并将该数字转换为年、日、小时、秒和毫秒,然后返回包含这些值的 Date 对象。转换工作完美,但是当我尝试创建 Date 对象时,出现问题。

转换本身的代码是这样的:

function milliConvert(milliseconds){
const second = 1000;
    const minute = 1000 * 60;
    const hour = minute * 60;
    const day = hour * 24;
    const year = day * 365;
    let years2 = Math.floor(milliseconds / year);
    let days = Math.floor(milliseconds / day)-(years2*365);
    let hours = Math.floor((milliseconds / hour)-(((years2*365))*24+(days*24)));
    let minutes = Math.floor((milliseconds / minute)-(((years2*365))*24*60+60*(days*24)+((hours)*60)));
    let seconds= Math.floor((milliseconds / second)-((years2*365*24*60*60)+(days*24*60*60)+(hours*60*60)+(minutes*60)));
    let outMilli= Math.floor((milliseconds)-((years2*365*24*60*60)+(days*24*60*60)+(hours*60*60)+(minutes*60)+(seconds*1000)));
    console.log(years2+":"+days+":"+hours+":"+minutes+":"+seconds)
//the rest of this function is in the next code snippet

就像我之前说的,它按预期工作。但我必须对将其转换为 Date 对象的代码进行大量故障排除,但它仍然不起作用。 我的第一次迭代总是会给我一个很大的负数,但我意识到那是因为years2值低于1970年,所以我确保将它增加到1970年。在那之后,它仍然不起作用,因为日期和由于某种未知的原因,小时值分别增加了 30 和 5。我当前创建日期对象的代码是这样的:


return(new Date(years2+1970,1,days-30,hours-5,minutes,seconds,outMilli));
}

它适用于较小的日期,但如果我将毫秒设置为 Date.now(),则日期的值为“2078-08-14T17:48:43.764Z”(根据 VSCode 控制台,当命令运行时时间和日期为 2024-04-27 15:29:03)。我的目标是 milliConvert(x).getTime() 等于 X。我知道其他人之前已经回答过类似的问题,但我仍然想知道为什么这具体不起作用,因为我认为这会进一步帮助我对 Date 对象的理解。 预先感谢!

javascript datetime
1个回答
1
投票

Date 类有一个接受时间戳的构造函数

所以你可以这样做

new Date(milliseconds)


    

© www.soinside.com 2019 - 2024. All rights reserved.