我试图通过.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)
答案 0 :(得分:2)
您不必设置月份,因为TextProperties
功能会自动处理:
https://www.w3schools.com/jsref/jsref_setdate.asp
chart.x_axis.textProperties.bodyProperties.rot = -5400000
-setDate
表示一个月中某一天的整数。预期值为1-31,但允许使用其他值:
- 0将导致上个月的最后一天
- -1将导致前一个月最后一天的前一天
如果月份有31天:
- 32将导致下个月的第一天
如果月份有30天:
- 32将导致下个月的第二天
您需要的是:
Date.setDate(day)
会回复星期几(星期日为0,星期一为1,星期六为6)
- 你必须把它转换为Monay是1,...星期六是6,星期日是7
- 您可以通过
进行转换day
(从达米安借来)- 否则,今天是星期天,代码将在本周日为您提供上周的星期日
你必须减少一周中的某一天(
getDay()
)到星期几(today.getDay() || 7
)
所以在你的情况下使用:getDate()
同样,如果你想获得当前周的周日,那么你必须增加7天:getDay()||7
LWSunday.setDate(today.getDate() - (today.getDay()||7));
你也可以用它来创造一个功能:
Sunday.setDate(today.getDate() - (today.getDay()||7) + 7);
答案 1 :(得分:1)
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
用于获取上周日的情况,今天也是星期天。
答案 2 :(得分:0)
我刚注意到你的真正问题: 星期天可能在上个月。 因此 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);
答案 3 :(得分:0)
SetDate()
找到时间值输入的月份日期。但是你试图通过外观找到整个日期值。如果我理解你想要做什么,你真正想要的是:
LWSunday.setTime(Sunday.getTime() - 7*24*60*60*1000);