获取上周一的Javascript

Sha*_*zan 7 javascript

有人可以帮忙做一些编码吗.基本上我希望上周一出现在用户输入今天日期的字段中.
例如:如果输入今天的日期,(29-Jan-16)则编码将使下一个星期一的日期出现,而不是(25-Jan-16).

我在网上看到了一些代码:

function getPreviousMonday()
{
    var date = new Date();
    if(date.getDay() != 0)
        return new Date().setDate(date.getDate()-7-6);
    else
        return new Date().setDate(date.getDate()-date.getDate()-6);
}
Run Code Online (Sandbox Code Playgroud)

但是,这并不是很有效.

小智 26

var prevMonday = new Date();
prevMonday.setDate(prevMonday.getDate() - (prevMonday.getDay() + 6) % 7);
Run Code Online (Sandbox Code Playgroud)

我有点晚了,但我喜欢这个解决方案.这是一个单一的班轮而不是那么复杂.为此制作一个功能对我来说似乎有些过分.

  • 其工作原理如下:将 6 天添加到“getDay()”(一周中的当前日期,例如星期五=5),然后除以一周的天数(“(5+6)%7=4”) `) 从当前日期中减去(例如 `29-4=25`)。 (2认同)

小智 6

我认为您的数学知识还差一点,我整理了您的语法。

function getPreviousMonday()
{
    var date = new Date();
    var day = date.getDay();
    var prevMonday;
    if(date.getDay() == 0){
        prevMonday = new Date().setDate(date.getDate() - 7);
    }
    else{
        prevMonday = new Date().setDate(date.getDate() - day);
    }

    return prevMonday;
}
Run Code Online (Sandbox Code Playgroud)

这样,您始终可以获得发生的最后一个星期一(如果今天是星期一,则为7天前)

  • 执行 `new Date(prevMonday);` 它将返回日期 (2认同)

Mat*_*cca 6

根据 @Philippe Dub\xc3\xa9-Tremblay 的回答,我想提出一些可以让你瞄准前一天的东西:

\n
let target = 1 // Monday\nlet date = new Date()\ndate.setDate(date.getDate() - ( date.getDay() == target ? 7 : (date.getDay() + (7 - target)) % 7 ))\n
Run Code Online (Sandbox Code Playgroud)\n

如果今天也是星期一,则考虑到上星期一

\n