2017-08-01 41 views
0

我有以下代码将我的头发疯了。javascript setDate从7月31日到8月30日的30天更改-1个月关闭

var forDt = new Date("2017-07-31"+ "T09:00:00.000"); 
    var workDt = new Date(); 
    workDt.setDate(forDt.getDate() - 1); 
    date_prev = workDt.toISOString().slice(0, 10); 

今天是8月1日。我点击了Prev按钮两次,datePrevJuly 31更改为August 30.

有人可以帮忙告诉我哪里出了问题吗?看起来像setDate()31-1=30,但没有更新的月份。无论如何要修复它吗?

谢谢你们。=)

+0

请注意,您使用的字符串将被解释为本地,但使用* toISOString *将返回UTC + 0000,因此根据主机时区偏移量可能会有所不同。 – RobG

回答

0

您正在创建一个new Date()由于其workDt将参考系统的当前日期。

var forDt = new Date("2017-07-31" + "T09:00:00.000"); 
 
var workDt = new Date(forDt.getTime()); 
 
workDt.setDate(forDt.getDate() - 1); 
 
date_prev = workDt.toISOString().slice(0, 10); 
 

 
console.log(date_prev); 
 

 
workDt.setDate(workDt.getDate() - 1); 
 
date_prev = workDt.toISOString().slice(0, 10); 
 

 
console.log(date_prev);

通过workDt使用new Date(forDt.getTime())设置,你让你想减少日期的一个副本,并设置该月的一天回来后,你会得到正确的答案

相关问题