【问题标题】:Get start and end of week with the start on Monday and end on Sunday in Javascript使用Javascript获取周一开始和周日结束的一周的开始和结束
【发布时间】:2022-03-10 23:59:36
【问题描述】:
    function getStartAndEndOfWeek(date) {

        var curr = date ? new Date(date) : new Date();
        var first = curr.getDate() - curr.getDay(); 

        var firstday = new Date(curr.setDate(first));
        var lastday = new Date(curr.setDate(firstday.getDate() + 6));

        return [firstday, lastday];

    }

我无法将一周的开始时间设置为星期一。上面的代码将第一天作为星期日。此外,如果我们完全添加第一个加一个,它将以星期一作为开始,但问题是让我们说 (06/29/2014, sunday) 是输入,它应该返回 (06/23/2014 作为开始和 06 /29/2014)作为结束。我们怎样才能做到这一点?如果我添加“first + 1”,它将返回 06/30/2014 作为开始日期,并将 07/06/2014 作为结束日期。有什么帮助吗?谢谢。

答案:

    function getStartAndEndOfWeek(date) {

        //Calculating the starting point

        var curr = date ? new Date(date) : new Date();
        var first = curr.getDate() - dayOfWeek(curr);

        var firstday, lastday;

        if (first < 1) {
            //Get prev month and year
            var k = new Date(curr.valueOf());
            k.setDate(1);
            k.setMonth(k.getMonth() - 1);
            var prevMonthDays = new Date(k.getFullYear(), (k.getMonth() + 1), 0).getDate();

            first = prevMonthDays - (dayOfWeek(curr) - curr.getDate());
            firstday = new Date(k.setDate(first));
            lastday = new Date(k.setDate(first + 6));
        } else {
            // First day is the day of the month - the day of the week
            firstday = new Date(curr.setDate(first));
            lastday = new Date(curr.setDate(first + 6));
        }

        return [firstday, lastday];            
    }

    function dayOfWeek(date, firstDay) {
        var daysOfWeek = {
            sunday: 0,
            monday: 1,
            tuesday: 2,
            wednesday: 3,
            thursday: 4,
            friday: 5,
            saturday: 6,
        };
        firstDay = firstDay || "monday";
        var day = date.getDay() - daysOfWeek[firstDay];
        return (day < 0 ? day + 7 : day);
    }

【问题讨论】:

    标签: javascript date


    【解决方案1】:

    您可以先将 getDay() 的结果移动到星期一,然后再取结果的模数。

    var first = curr.getDate() - ((curr.getDay() + 6) % 7); 
    

    【讨论】:

    • 但这会在周日返回 6。
    • 是的,按照要求,星期一将是 0。
    【解决方案2】:

    不如制作一个简单的方法让你轻松操控一周的第一天:

    (function() {
      var original = Date.prototype.getDay;
      var daysOfWeek = {
        sunday: 0,
        monday: 1,
        tuesday: 2,
        wednesday: 3,
        thursday: 4,
        friday: 5,
        saturday: 6,
      };
    
      Date.prototype.getDay = function(weekBegins) {
        weekBegins = (weekBegins || "sunday").toLowerCase();
        return (original.apply(this) + 7 - daysOfWeek[weekBegins]) % 7;
      };
    })();
    

    那么你可以简单地使用:

    var first = curr.getDate() - curr.getDay("monday"),
        last  = first + 6;
    

    【讨论】:

    • 另外问题是,如果我将星期天作为日期发送给函数,它将返回下周,而不是前一周。这就是我没有添加的原因。
    • 更新了,有帮助吗?
    • 我了解转换月份的问题。有一个主要问题,让我们说今天(06/29/2014,星期日)是输入,它应该返回(06/23/2014 作为开始,06/29/2014)作为结束。我们怎样才能做到这一点?现在根据你告诉它返回 06/30/2014 作为开始日期和 07/06/2014 作为结束日期
    【解决方案3】:

    找到其他解决方案:

    const getDayIndexMondaySunday = (date) =>date.getDay() === 0 ? 6 : date.getDay() - 1
     // Result on Today
     console.log(getDayIndexMondaySunday(new Date()));

    【讨论】:

      【解决方案4】:

      简单很多

      var numberdayweek = [6,0,1,2,3,4,5];
      fecha = new Date();
      console.log(numberdayweek[fecha.getDay()]);

      【讨论】:

        猜你喜欢
        • 2018-10-05
        • 1970-01-01
        • 1970-01-01
        • 2021-01-18
        • 2010-11-19
        • 2019-11-06
        • 2023-03-30
        • 1970-01-01
        • 2014-05-18
        相关资源
        最近更新 更多