gpt4 book ai didi

javascript - 如何将此日期从 momentjs 转换为纯 JavaScript

转载 作者:行者123 更新时间:2023-12-01 01:24:16 24 4
gpt4 key购买 nike

我有一个时间戳,正在尝试舍入到最近的 UTC 星期一 00:00:00:00:000Z

我的代码如下所示

let now = Date.now()
moment.unix(now / 1000).utc().startOf("isoWeek").valueOf()

我正在尝试用纯 JS 立即执行此操作,但没有得到相同的答案

const nearestMonday = date => {
const monday = 1;
const currentDay = date.getDay();
const distance = (monday + 7 - currentDay) % 7;
const newDate = new Date(date.getTime());
newDate.setDate(date.getDate() + distance);
newDate.setHours(0, 0, 0, 0);
return newDate;
}

> d = Date.now()
1545989455067
> nearestMonday(new Date(d)).getTime()
1546194600000
> m.unix(Date.now() / 1000).utc().startOf("isoWeek").valueOf()
1545609600000

我位于 GMT + 530 时区,我需要更改什么才能获得与 moment 相同的答案

最佳答案

好的,我们这里有一些问题:

第一:时区

Date 使用您本地的时区,因此当您执行 newDate.setHours(0, 0, 0, 0); 之类的操作时,它会将对象设置为该小时数 您的时区。但是,当您执行 .getTime() 时,它确实会从 UTC 纪元返回毫秒。

这样做的结果是:如果你在 gmt+530(我相信印度),当你执行 .getTime() 时,纪元的毫秒数将因该差异而偏离(5h 30m)。

为了弥补这一点,您可以使用getTimezoneOffset():

const nearestMonday = date => {
const monday = 1;
const currentDay = date.getDay();
const distance = (monday + 7 - currentDay) % 7;
const newDate = new Date(date.getTime());
newDate.setDate(date.getDate() + distance);
newDate.setHours(0, 0, 0, 0);
newDate.setTime(newDate.getTime()-1000*60*newDate.getTimezoneOffset());
return newDate;
}

另一方面,使用 moment 的代码可以在时区下正常工作,因此无需更改它。

<小时/>

第二:星期一是什么?

您的函数nearestMonday计算下一个星期一。

函数startOf('isoWeek')将日期设置为当前周的星期一。

如果您希望两者都计算当前,您应该修改您的nearestMonday,如下所示:

const nearestMonday = date => {
const monday = 1;
const currentDay = date.getDay();
const distance = monday - currentDay;
console.log('dist', distance);
const newDate = new Date(date.getTime());
newDate.setDate(date.getDate() + distance);
newDate.setHours(0, 0, 0, 0);
newDate.setTime(newDate.getTime()-1000*60*newDate.getTimezoneOffset());
return newDate;
}
<小时/>

最后:周日?

星期日的

getDay() 将返回 0。因此,“最近的星期一”将是该日期之后的一天。我没有更正它,因为我不知道这是否是所需的行为,但只是为了完成而注意到它

关于javascript - 如何将此日期从 momentjs 转换为纯 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53956455/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com