日期对象更改

时间:2018-05-12 14:03:23

标签: javascript html date

我想实施一个每两周重复一次的计划(也许我可以使用Modulos吗?)。例如,5月14日星期一是第6天,而5月21日星期一是第1天。然后,5月28日星期一回到第6天。到目前为止,我带来的只能检查一天是否是星期一。但是,那个星期一可能是第1天或第6天。这些日子我能分辨出来吗?我在下面附上了一个代码段。感谢。

*为了澄清,我无视周末,因此,第二个星期一将是第6天,而不是第8天。

var time1 = new Date(2018,4,11);
var time2 = new Date(2018,4,21);
var time3 = new Date();
var diff = time2.getDate() - time1.getDate();
var dayNum = document.getElementById("dayNumber");
var day = time2.getDay();
var isWeekend = (day == 6) || (day == 0); 

if((diff % 7 === 3) && day === 1){

	document.getElementById("dayNumber").innerHTML="Today is Day 6";	

} 



//if day divided by 7 leaves a remainder of 3, and it's a monday, that day is either day 1 or day 6 
<p id = "dayNumber"></p>

1 个答案:

答案 0 :(得分:1)

首先,您似乎正在考虑在 14s 中重复并尝试在mod 7中解决的模式,这将非常困难。相反,也适用于mod 14

其次,7天后18天(而不是6天),因此您需要对这些案例进行进一步转换。如果您不关心星期六或星期日,我们可以&#34;将它们全部丢弃&#34; 将它们全部映射到0。这确实意味着周末操作不可逆。

这是一个返回

的函数
  • 0如果输入为06mod 7
  • 如果输入超过2mod 14),则
  • 5小于输入(mod 14
  • 输入(mod 14),如果输入为5或更少(mod 14

所以你只需要调整一些初始偏移量

const day = x => {
    const y = (x % 7) % 6;
    if (y === 0) return 0;
    const z = x % 14;
    return z > 5
        ? z - 2
        : z;
};

day(0); // 0
day(1); // 1
day(2); // 2
day(3); // 3
day(4); // 4
day(5); // 5
day(6); // 0
day(7); // 0
day(8); // 6
day(9); // 7
day(10); // 8
day(11); // 9
day(12); // 10
day(13); // 0
day(14); // 0
day(15); // 1
// ...