尝试同步2年之间的工作日



我正试图想出一些东西来同步年份之间的工作日

到目前为止,我只需减去364天的就可以完成4年的间隔

例如2021年2月1日星期一-364天变为2020年2月3日星期一2021年2月19日星期五-364天变为2020年2月21日星期五2021年3月2日星期二-364天变为2020年3月3日星期二

注意工作日是如何完美同步的(周一到周一,周二到周二等(

我只需要728天(364*2(就可以做2年依此类推3年和4年

我的问题是4年后它停止工作

如果我做同样的事情5年(364*5(

2021年2月1日星期一变为2016年2月8日星期一然而,我希望是2016年2月1日星期一

我似乎无法破解如何在上处理这5年

这是使用Zeller规则来获得日期编号,然后在减去365天时修改实际日期,以获得匹配的日期名称。我确信有一些边缘情况(例如,我相信这目前会导致类似"3月33日"的结果(,但这应该让你开始:

const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
const months = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
];
const dayNum = (day, month, year) => {
if (month <= 2) {
year--;
month += 12;
}
month-=2;
const lastTwoDigitsOfYear = year % 100;
const firstTwoDigitsOfYear = (year - lastTwoDigitsOfYear) / 100
let F = day + Math.floor((13*month-1)/5) + lastTwoDigitsOfYear + Math.floor(lastTwoDigitsOfYear/4) +Math.floor(firstTwoDigitsOfYear/4)-2*firstTwoDigitsOfYear
let f = F >= 0 ? (F % 7) : 7 + (F % 7);
return f
}
// Ok, so we can get the day for any date.
const syncedYearAdd = (day, month, year, numYears) => {
const d1 = dayNum(day, month, year);
const d2 = dayNum(day, month, year + numYears);
if (d1 < d2) {
day -= (d2 - d1)
} else if (d1 > d2) {
day += (d1 - d2);
}
if (day < 0) {
day += 7;
}
console.log(days[d1], day, months[month-1], year + numYears)
}
// Monday Feb 1st 2021
for (let i = 0; i <= 5; i++) {
syncedYearAdd(1, 2, 2021, i * -1)
}

最新更新