在某些情况下,当执行.setDate(currentDate.getDate()-30)时,Javascript获取日期错误的日期

时间:2018-08-01 05:55:09

标签: javascript

var fromDate = new Date();
var toDate = new Date();
fromDate.setDate(fromDate.getDate() - 1);
toDate.setDate(fromDate.getDate() - 30);

现在当我打印formDate时正在打印 日期2018-07-31T05:33:46.399Z

现在,当打印toDate时,将进行打印 日期2018-08-01T05:33:46.399Z

当前日期是日期2018-08-01T06:00:46.921Z

所以我想知道Yesturday的日期和Yesturday日期的30天之前 如何不使用时间获取以前的日期

2 个答案:

答案 0 :(得分:1)

setDate()相对地设置日期。第一个代码段在您将日期设置为0时起作用,这会将上个月的最后一个日期设置为date对象。根据文档

  

如果dayValue在月份的日期值范围之外,则setDate()将相应地更新Date对象。例如,如果为dayValue提供了0,则日期将被设置为上个月的最后一天。

但是在第二个代码段中,您将日期设置为1(31-30),这不会相对但绝对地设置日期,因为1是有效日期,并且不在外部范围。因此,您最终在1中将日期设置为toDate

正确的方法是从toDate中减去31(假设您希望7月1日),这将创建一个相对值(1-31 == -30),从而正确设置日期。 / p>

var formDate = new Date();
var toDate = new Date();
formDate.setDate(formDate.getDate() - 1);
toDate.setDate(toDate.getDate() - 31);

console.log(formDate, toDate);

答案 1 :(得分:-2)

您错过了31,而不是30

var formDate = new Date();
    var toDate = new Date();
    formDate.setDate(formDate.getDate() - 1);
    toDate.setDate(toDate.getDate() - 31);
    
    console.log(formDate);
    console.log(toDate);