首页 > 解决方案 > 如何将此日期从 momentjs 转换为纯 JavaScript

问题描述

我有一个时间戳,我试图将其舍入到最近的 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

我在格林威治标准时间 + 530 区,我要改变什么才能得到与时刻相同的答案

标签: javascriptdatetimestampmomentjs

解决方案


我认为这可能会做你想要的:

const nearestMonday = date => {
    const day = 1000*60*60*24;
    const week = day*7;
    return new Date(Math.floor(date.getTime()/week)*week-3*day);
}

推荐阅读