javascript - 根据语句的顺序,函数返回不正确的月份

标签 javascript date

有人对为什么会发生这种情况有任何想法吗?今天,我发现我编写的日期转换函数开始返回错误的月份。例如,当尝试将“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/

相关文章:

javascript - 如何使用 fetch API 将字符串发送到服务器

java - 如何制作具有固定日期格式的 jtextfield?

php - 显示最接近当前日期和时间的结果(MySQL 和 PHP)

javascript - 如何在 Javascript 中使用 Date 获取相对于当前时区的日期?

javascript - Kendo UI,如何删除条形图前后的空间?

javascript - 使用 javascript 正则表达式单词边界排除完整单词

swift - 以正确的方式从 Int 构造日期

带日期戳的 PHP 重命名

javascript - 在 d3.js 折线图中使用 img 而不是文本标签

javascript - Firebase自定义身份验证: Security of Firebase Secret in JavaScript