计算以前的星期日Javascript

时间:2017-05-06 13:20:10

标签: javascript date

我试图通过.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)

https://jsfiddle.net/afmc9yon/

4 个答案:

答案 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);

http://jsbin.com/yevutabuxe/edit?console

答案 3 :(得分:0)

SetDate()找到时间值输入的月份日期。但是你试图通过外观找到整个日期值。如果我理解你想要做什么,你真正想要的是:

    LWSunday.setTime(Sunday.getTime() - 7*24*60*60*1000);