有人对为什么会发生这种情况有任何想法吗?今天,我发现我编写的日期转换函数开始返回错误的月份。例如,当尝试将“2017-06-02”转换为“Fri Jun 02 2017 00:00:00 GMT-0600(山地夏令时间)”时,实际上返回的是七月而不是六月。当我重新排列函数中一些语句的顺序时,终于返回了正确的日期。该代码已经存在好几个月了,所以这种自发的...也许是由于当前月份的变化,因为今天是 5/31/2017?这可能只有在今天或月底运行时才会被打破? (我确信有更好的方法来转换日期,但无论如何,这里是有问题的代码):
<!doctype html>
<body onload="testDate()">
<div id="resultbad"></div>
<div id="resultgood"></div>
<script>
function testDate() {
document.getElementById("resultbad").innerHTML = "Bad Result: Converting 2017-06-02 returns: " + badDate("2017-06-02");
//returns: Bad Result: Converting 2017-06-02 returns: Sun Jul 02 2017 00:00:00 GMT-0600 (Mountain Daylight Time)
document.getElementById("resultgood").innerHTML = "Good Result: Converting 2017-06-02 returns: " + goodDate("2017-06-02");
//returns: Good Result: Converting 2017-06-02 returns: Fri Jun 02 2017 00:00:00 GMT-0600 (Mountain Daylight Time)
}
function badDate(d) {
var td = d.split('-');
var nd = new Date();
//originally ordered: Year, Month then Day
nd.setFullYear(td[0]);
nd.setMonth(td[1] - 1);
nd.setDate(td[2]);
//set time
nd.setHours(0);
nd.setMinutes(0,0,0);
return nd;
}
function goodDate(d) {
var td = d.split('-');
var nd = new Date();
//new order: Day, Month then Year
nd.setDate(td[2]);
nd.setMonth(td[1] - 1);
nd.setFullYear(td[0]);
//set time
nd.setHours(0);
nd.setMinutes(0,0,0);
return nd;
}
</script>
</body>
最佳答案
此代码根据今天的日期覆盖日期元素。因此,如果您在该月的 31 天运行代码,则该代码的“错误”版本将首先覆盖该月,如果该月只有 30 天,它将滚动到下个月。
基本上,在 setMonth 之后但在 setDate 之前,您尝试创建日期 2017 年 6 月 31 日,JS 会将其转换为 2017 年 7 月 1 日。
相反,请通过一次调用来执行此操作:
新日期(td[0], td[1]-1, td[2], 0, 0, 0, 0)
关于javascript - 根据语句的顺序,函数返回不正确的月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44296170/