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.