This question already has answers here:
Why does Date.parse give incorrect results?
                                
                                    (11个答案)
                                
                        
                2年前关闭。
            
        

我需要验证提到的日期是否应大于或等于当前日期。但是这里的问题是,如果用户给的旧日期是'03 / 11/0018',则默认情况下年份将被视为2018(按照下面的代码)。
我做的一种方法是获取输入数据并使用子字符串和handle获取年份(以下代码中未提及)。
还有其他方法可以解决吗?



    <html>
    <head>
    <script>
    function dateCompare() {
       var d1 = new Date('03/11/0018');
       var d2 = new Date('03/11/2018'); //consider today's date is 03/11/2018
       if(d1 < d2){
           //validate the input date
           document.write("entered date cannot be earlier to the current date");
       }
       else{
           //validation passed
           document.write("Ideally 03/11/0018 is earlier than 03/11/2018 & validation should be failed");
       }
    }
    dateCompare();
    </script>
    </head>
    </html>

最佳答案

MDN strongly discourages使用new Date(string)Date.parse(string)的原因在于实现是与浏览器相关的,并且您已经发现,这通常有点不直观。

您可以自己解析字符串,这样做很好,尤其是在格式正确定义的情况下。

const re = /(\d\d)\/(\d\d)\/(\d\d\d\d)/;

const [whole, day, month, year] = re.exec('03/02/2018');


然后,如果需要,可以使用这些数字来构造Date

const d = new Date(year, month - 1, day);


请注意,Date构造函数期望零索引月份(即一月是0)。

另请注意,Date将年份0 - 99映射到1900 - 1999。如果您不想这样做,则需要使用Date.prototype.setFullYearDate.prototype.getFullYear强制执行。是否需要这样做的地方不是很一致:

const d = new Date(88, 1, 2);
console.log(d); // 1988-02-02T00:00:00.000Z

d.setFullYear(88);

console.log(d); // 0088-02-02T00:00:00.000Z
console.log(d.getYear()); // -1812
console.log(d.getFullYear()); // 88


这里有很多陷阱,您应该考虑使用带有更清洁日期API的库。

关于javascript - Javascript中的日期比较和验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49219797/

10-12 12:39
查看更多