繁体   English   中英

一周的第一天和最后一天不工作(从星期日开始)

[英]First and last day of the week not working (starting from sunday)

我有这个代码,可以获取当前一周的第一天和最后一天(从星期日开始 - 以星期六结束)。 本周工作正常,直到今天月份发生变化。

这是我的代码:

 // current date 1 Sep 2017 curr = new Date(2017, 8, 1); console.log(curr.toString()); // Fri Sep 01 2017 00:00:00 // First day of week var first = curr.getDate() - curr.getDay(); // Last day week var last = first + 6; var startDate = new Date(curr.setDate(first)); console.log(startDate.toString()); // Sun Aug 27 2017 00:00:00 var endDate = new Date(curr.setDate(last)); console.log(endDate.toString()); // Wed Aug 02 2017 00:00:00

所以,问题是,在endDate应该是星期六02九月未星期三8月2日

这一直工作正常,直到月份从 8 月变为 9 月。

有什么方法可以解决这个问题?

我知道了。 未正确设置结束日期。 尝试这个。

 let curr = new Date(); console.log(curr.toString()); let startDate = new Date(curr.setDate(curr.getDate() - curr.getDay())); console.log(startDate.toString()); let endDate = new Date(curr.setDate(curr.getDate() + 6)); console.log(endDate.toString());

我认为这是重复的,但我现在找不到。 您的问题是您调整日期的方式。 日期方法会修改它们被调用的日期,因此您正在修改curr ,但将其视为未更改。

// current date
curr = new Date(new Date().getTime() + 60 * 60 * 24 * 7);

这不是增加 1 天的好方法,但不是您的问题。 最好先将时间归零,然后在日期上加一。

console.log(curr);
// Fri Sep 01 2017 01:52:15 


// First day of week
var first = curr.getDate() - curr.getDay();

first设置为 -4(日期为 1,星期五为 5)。

// Last day week
var last = first + 6;

最后设置为 2 (-4 + 6)。

var startDate = new Date(curr.setDate(first));

会将 curr修改为 8 月 27 日。 然后复制它以创建一个分配给startDate的新 Date(即currstartDate具有相同的时间值并表示相同的日期和时间)。

console.log(startDate);
// Sun Aug 27 2017 01:57:25 

是的。 现在您将curr的日期设置为 2,即 8 月 2 日。

var endDate = new Date(curr.setDate(last));
console.log(endDate);
// Wed Aug 02 2017 01:59:37

是的。 或者,复制原始日期并修改副本以获取startDate ,然后获取另一个副本并将其修改为结束日期。

 function getWeekStartEnd(date) { // Copy date so don't modify original date = date? new Date(+date) : new Date(); // Set time to 0 and copy date at same time var startDate = new Date(date.setHours(0,0,0,0)); // Set startDate to previous Sunday startDate.setDate(startDate.getDate() - startDate.getDay()); // Set endDate to next Saturday var endDate = new Date(+date); endDate.setDate(endDate.getDate() + 6 - endDate.getDay()); return [startDate, endDate]; } // Current week getWeekStartEnd().forEach(function(d){ console.log(d.toString()); }); // For Friday 1 September, 2017 getWeekStartEnd(new Date(2017,8,1)).forEach(function(d){ console.log(d.toString()); }); // For Sunday 3 September, 2017 getWeekStartEnd(new Date(2017,8,3)).forEach(function(d){ console.log(d.toString()); });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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