[英]Calculating previous Sunday Javascript
我试图通过.setdate .getdate - 7天方法计算上一个星期日的日期,但它似乎完全适用于上周星期六计算但不适用于周日。 有任何想法吗?
var today = new Date(); var yesterday = new Date(); var LWyesterday = new Date(); var LWSunday = new Date(); // Set yesturday date yesterday.setDate(today.getDate() - 1); console.log('yesterday = ' + yesterday); // Calculated and set Sunday var Sunday = new Date(today.getTime() - today.getDay() * 24 * 3600 * 1000); console.log('recent sunday = ' + Sunday); // Set yesturday last week LWyesterday.setDate(yesterday.getDate() - 7); console.log('last week yesterday = ' + LWyesterday); // Set sunday last week LWSunday.setDate(Sunday.getDate() - 7); console.log('last week sunday = ' + LWSunday); // returns Tue May 23 2017 14:08:24 GMT+0100 (GMT Summer Time) // Should have been Tue >**April**< 23 2017 14:08:24 GMT+0100 (GMT Summer Time)
您不必设置月份,因为setDate
函数会自动处理:
https://www.w3schools.com/jsref/jsref_setdate.asp
Date.setDate(day)
- 表示一个月中day
的整数。预期值为1-31,但允许使用其他值:
- 0将导致上个月的最后一天
- -1将导致前一个月的最后一天前一天
如果月份有31天:
- 32将导致下个月的第一天
如果月份有30天:
- 32将导致下个月的第二天
你需要的是:
getDay()
返回星期几(星期日为0,星期一为1,星期六为6)
- 你必须把它转换为Monay是1,...星期六是6,星期日是7
- 你可以通过
today.getDay() || 7
进行转换today.getDay() || 7
(从达米安借来)- 否则当今天是星期天时,代码会给你这个星期天作为上周的星期日
你必须减少星期几(
getDate()
)到星期几(getDay()||7
)
所以在你的情况下使用: LWSunday.setDate(today.getDate() - (today.getDay()||7));
同样地,如果你想获得当前周的周日,那么你必须增加7天: Sunday.setDate(today.getDate() - (today.getDay()||7) + 7);
var today = new Date(); var Sunday = new Date(); var LWSunday = new Date(); // Calculated and set Sunday Sunday.setDate(today.getDate() - (today.getDay()||7) + 7); console.log('recent sunday = ' + Sunday); // Set sunday last week LWSunday.setDate(today.getDate() - (today.getDay()||7)); console.log('last week sunday = ' + LWSunday);
你也可以用它来创建一个函数:
if (!Date.prototype.getSunday) Date.prototype.getSunday = function() { var dat = new Date(this.valueOf()); dat.setDate(dat.getDate() - (dat.getDay()||7) + 7); return dat; } if (!Date.prototype.getLastSunday) Date.prototype.getLastSunday = function() { var dat = new Date(this.valueOf()); dat.setDate(dat.getDate() - (dat.getDay()||7) ); return dat; } var date = new Date('2017-01-02'); console.log(date); console.log('this Sunday',date.getSunday()); console.log('last sunday',date.getLastSunday()); var date = new Date('2017-01-01'); console.log(date); console.log('this Sunday',date.getSunday()); console.log('last sunday',date.getLastSunday()); date = new Date('2017-05-02'); console.log(date); console.log('this Sunday',date.getSunday()); console.log('last sunday',date.getLastSunday()); date = new Date('2017-05-07'); console.log(date); console.log('this Sunday',date.getSunday()); console.log('last sunday',date.getLastSunday());
var now = new Date();
var daysBack = -7 + (7 - now.getDay());
console.log(
new Date(now.getTime() + ((daysBack || -7)*1000*60*60*24))
)
我们使用daysBack
变量,这样我们就可以获得上周日,无论今天是星期几。 由于getDay()
在星期日返回0,在星期一等返回1,我们使用如上所述的公式。 例如,如果今天是星期六而getDay()
给我们6,我们这里有-7 +(7 - 6),然后是-7 + 1,我们得到-6,这意味着最接近的星期日是6天前。
daysBack || -7
daysBack || -7
用于获取前一个星期日的情况今天也是星期天。
我刚刚注意到你的真正问题:周日可能是在上个月。 因此, Sunday.getDate() - 7是正数,而不是更改LWSunday Month属性...
所以你还需要改变月份(在某些情况下):
LWSunday.setDate(Sunday.getDate() - 7);
if(Sunday.getMonth()!==today.getMonth()){
LWSunday.setMonth(LWSunday.getMonth()-1);
}
//same for year...
console.log('last week sunday = ' + LWSunday);
或者你采取整个日期:
var LWSunday = new Date(Sunday.getTime() - 7*24*3600*1000);
SetDate()
查找时间值输入的月份日期。 但是你试图通过外观找到整个日期值。 如果我理解你想要做什么,你真正想要的是:
LWSunday.setTime(Sunday.getTime() - 7*24*60*60*1000);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.