[英]How do I convert this date from momentjs to plain 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
我在GMT + 530區域中,該如何更改以得到與瞬間相同的答案
我認為這可能會滿足您的要求:
const nearestMonday = date => {
const day = 1000*60*60*24;
const week = day*7;
return new Date(Math.floor(date.getTime()/week)*week-3*day);
}
好的,所以這里有一些問題:
第一:時區
日期與您的本地時區一起使用,因此當您執行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;
}
另一方面,您使用代碼的代碼將在時區正常工作,因此無需更改它。
第二:什么星期一?
您的函數nearestMonday
計算下一個星期一。
函數startOf('isoWeek')
將日期設置為當前星期的星期一。
如果您想兩者都計算current ,則應修改您的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。因此,“ nearestMonday”將是其后的一天。 我沒有更正它,因為我不知道這是否是理想的行為,但請注意只是為了完成
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.