Javascript和setMonth的行为异常

Javascript和setMonth的行为异常,javascript,Javascript,我正在做datObj.setMonth1,但是这个月被设置为三月?1号不是应该是二月吗?我用的是Chrome79 这里有一部分代码是用来解析诸如YYYY-MM-DD HH:MM:SS之类的日期的,因为safari无法在本机上实现这一点 var date = "2020-02-02 23:59:00" if (typeof date == 'string') { var dateParts = date.split(/[:-\s]+/);

我正在做datObj.setMonth1,但是这个月被设置为三月?1号不是应该是二月吗?我用的是Chrome79

这里有一部分代码是用来解析诸如YYYY-MM-DD HH:MM:SS之类的日期的,因为safari无法在本机上实现这一点

var date = "2020-02-02 23:59:00"

        if (typeof date == 'string')
        {
            var dateParts = date.split(/[:-\s]+/);

            if (dateParts.length == 6)
            {
                dateObj = new Date();

                dateObj.setYear(dateParts[0]);
                var m = dateParts[1] - 1;
                console.log('m= ' + m);
                dateObj.setMonth(m);
                console.log('after setmonth, date= ' + dateObj);
                dateObj.setDate(dateParts[2]);
                dateObj.setHours(dateParts[3]);
                dateObj.setMinutes(dateParts[4]);
                dateObj.setSeconds(dateParts[5]);
            }
        }

console.log(dateObj);
alert(dateObj);

在我提交之前我就知道了。今天是2020年1月30日。我不能把月份改为二月,因为没有二月三十号。因此,代码在每月的29日或30日中断

在JavaScript中,建议执行以下操作

dateObj.setMonth(monthNum -1, dayNum)

同时设置日期和月份以避免此问题

正如您所想,您的问题是,您在设置月份时,日期仍然是30。虽然您可以通过使用setFullYear和pass year、month和day同时解决这个问题,但您确实应该首先使用正确的值构造整个Date对象:

dateObj = new Date(dateParts[0], dateParts[1]-1, dateParts[2], dateParts[3], dateParts[4], dateParts[5]);
或者更确切地说,使用UTC作为时区:

dateObj = new Date(Date.UTC(dateParts[0], dateParts[1]-1, dateParts[2], dateParts[3], dateParts[4], dateParts[5]));