简体   繁体   中英

Get start and end of week with the start on Monday and end on Sunday in Javascript

    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];

    }

I am unable to set the start of week as Monday. Above code gives the firstday as sunday. Also if at all we add first plus one it will give monday as the start but the issue would be where lets say (06/29/2014, sunday) is the input, it should return (06/23/2014 as start and 06/29/2014) as the end. How can we accomplish that? If I add "first + 1" it returns 06/30/2014 as start and 07/06/2014 as end date. Any help? Thanks.

Answer:

    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);
    }

How about making a simple method to allow you to easily manipulate the first day of the week:

(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;
  };
})();

Then you can simply use:

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

您可以通过移动getDay()的结果,然后将结果取模,首先将其设置为星期一。

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

much simpler

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

Found other solution:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM