Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript减去一个月返回,当月日为31时,当月的第一天_Javascript_Date - Fatal编程技术网

javascript减去一个月返回,当月日为31时,当月的第一天

javascript减去一个月返回,当月日为31时,当月的第一天,javascript,date,Javascript,Date,通常我从当前日期减去一个月,如下所示: //assuming today is 2018-05-30T09:50:05.345Z var d = new Date; console.log(d); // return : 2018-05-30T09:50:05.345Z d.setUTCMonth( d.getUTCMonth() -1 ); console.log(d); //return : 2018-04-30T09:50:05.345Z 但是假设,今天是本月31号,这已经不起作用了

通常我从当前日期减去一个月,如下所示:

//assuming today is 2018-05-30T09:50:05.345Z

var d = new Date;
console.log(d);
// return : 2018-05-30T09:50:05.345Z

d.setUTCMonth( d.getUTCMonth() -1 );
console.log(d);
//return : 2018-04-30T09:50:05.345Z
但是假设,今天是本月31号,这已经不起作用了。。。例:

//assuming today is 2018-05-31T09:54:23.850Z

var d = new Date;
console.log(d);
// return : 2018-05-31T09:54:23.850Z

d.setUTCMonth( d.getUTCMonth() -1 );
console.log(d);
//return : 2018-05-01TT09:54:23.850Z
不是将日期设置为上个月,而是将日期设置为每月的第一天(与
d.setMonth(d.getMonth-1)相同)


我遗漏了什么?

当你放置静态值,比如
dateObj.setUTCMonth(4);
它显示的是相同的,即
2018-05-01
但是如果我们放置
var dateObj=new Date();dateObj.setUTCMonth(dateObj.getUTCMonth()-1,30);console.log(dateObj);
有效。这是JS问题。如果你想使用相同的代码,你需要检查月内的天数,然后执行条件基代码。

你没有遗漏任何东西,这只是指定的方式。你可能需要查看(源代码)moment.JS,它的处理方式与普通JavaScript不同。