如何在 JavaScript 中获取本周的第一天和最后一天

IT技术 javascript date
2021-02-07 05:31:48

我有today = new Date();对象。我需要获取本周的第一天和最后一天。我需要周日和周一的两个变体作为一周的开始和结束日。我现在对代码有点困惑。你能帮我吗?

6个回答
var curr = new Date; // get current date
var first = curr.getDate() - curr.getDay(); // First day is the day of the month - the day of the week
var last = first + 6; // last day is the first day + 6

var firstday = new Date(curr.setDate(first)).toUTCString();
var lastday = new Date(curr.setDate(last)).toUTCString();

firstday
"Sun, 06 Mar 2011 12:25:40 GMT"
lastday
"Sat, 12 Mar 2011 12:25:40 GMT"

这适用于本周的第一天 = 周日和本周的最后一天 = 周六。将它扩展到周一到周日运行是微不足道的。

让它在不同月份的第一天和最后一天工作留给用户练习

与@Rayons 答案类似的代码,但这甚至可以在其他月份和年份中使用,而且 var curr = new Date('2014-10-01T00:00:00'); // get current date var first = curr.getDate() - curr.getDay(); // First day is the day of the month - the day of the week var last = first + 6; // last day is the first day + 6 firstday = new Date(curr.setDate(first)).toUTCString(); lastday = new Date(curr.setDate(curr.getDate()+6)).toUTCString(); 我已经更正了 @RichardN 的代码,这是一个小错误
2021-03-12 05:31:48
为了让它在包括二月在内的每个月都工作,只需将上面代码中的 lastday 行放在第一天之前,它就可以在所有月份工作。
2021-03-29 05:31:48
谢谢,我怎么能做到这一点,但是第一天是星期一吗?
2021-04-02 05:31:48
var first = curr.getDate() - curr.getDay() +1;
2021-04-04 05:31:48
为了让它在你有不同的月份时工作 - var lastday = new Date(curr.setDate(first.getDate()+6)).toUTCString();
2021-04-11 05:31:48

请注意接受的答案,它没有将时间设置为 00:00:00 和 23:59:59,因此您可能会遇到问题。

您可以使用第三方日期库来处理日期。例如:

var startOfWeek = moment().startOf('week').toDate();
var endOfWeek   = moment().endOf('week').toDate();

编辑:截至 2020 年 9 月,不鼓励对新项目使用 Moment(博客文章

另一种流行的替代方法是date-fns

Love moment js,最好的日期/时间库之一!
2021-03-14 05:31:48
要在不使用 moment.js 的情况下考虑时间,请使用 Date.setHours: curr.setHours(0,0,0,0); lastday.setHours(23,59,59,59);
2021-03-15 05:31:48
必须是“isoWeek”而不是“isoweek”
2021-03-18 05:31:48
谢谢你们节省了我的时间:-)
2021-03-20 05:31:48
如果您使用 moment 使用“isoweek”而不是“week”,否则它将从星期日开始一周,并以星期六结束,所以 var startOfWeek = moment().startOf('isoweek').toDate(); var endOfWeek = moment().endOf('isoweek').toDate();
2021-03-21 05:31:48

您还可以使用以下代码行获取一周的第一个和最后一个日期:

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

希望它会很有用..

是的,但是@totymedii,Raynos 的回答在 2019 年 3 月 1 日是错误的,我有证据证明,第一天 :: 2019 年 2 月 24 日星期日 08:33:48 GMT 最后一天 :: 2019 年 2 月 2 日星期六 08:33:48 GMT
2021-03-21 05:31:48

优秀(且不可变)的date-fns 库最简洁地处理了这个问题:

const start = startOfWeek(date);
const end = endOfWeek(date);

一周的默认开始日期是星期日 (0),但可以像这样更改为星期一 (1):

const start = startOfWeek(date, {weekStartsOn: 1});
const end = endOfWeek(date, {weekStartsOn: 1});
加 1 用于使用 date-fns 而不是 moment
2021-03-16 05:31:48

这是获取任何开始日的第一天和最后一天的快速方法。知道:

1 天 = 86,400,000 毫秒。

JS 日期值以毫秒为单位

食谱:计算出需要删除多少天才能获得一周的开始日(乘以 1 天的毫秒数)。之后剩下的就是添加 6 天以获得结束日。

var startDay = 1; //0=sunday, 1=monday etc.
var d = now.getDay(); //get the current day
var weekStart = new Date(now.valueOf() - (d<=0 ? 7-startDay:d-startDay)*86400000); //rewind to start day
var weekEnd = new Date(weekStart.valueOf() + 6*86400000); //add 6 days to get last day
这不起作用,因为由于夏令时,天并不总是 86,400,000 毫秒长......
2021-04-09 05:31:48