用Javascript检查2个日期

Checking 2 dates with Javascript

本文关键字:日期 2个 检查 Javascript      更新时间:2023-09-26

我正在尝试检查到达日期是否与离开日期相同,然后它应该显示一个警告框,上面写着"请更改到达日期"。

为什么它不能在JavaScript中工作。

Leaving: <input type='date' id='mydateL' class="icon"></input>
Returning: <input type='date' id='mydateR' class="icon"></input>
<input type="button" value="test" onclick="datetimevalidation()"

<script>
function datetimevalidation() {
    var leavedate = new Date(document.getElementById("mydateL").value);
    var arrivedate = new Date(document.getElementById("mydateR").value);      
    if(leavedate == arrivedate) {        
         alert('Please change arrivedate.');
}
}
</script>

只需将日期转换为long即可进行比较。

 var leavedate = +new Date(document.getElementById("mydateL").value);
 var arrivedate = +new Date(document.getElementById("mydateR").value);

    if(leavedate == arrivedate) {        
         alert('Please change arrivedate.');
}

您需要在if条件中使用getFullYear()getMonth()getDate()

Leaving:
<input type='date' id='mydateL' class="icon"></input>Returning:
<input type='date' id='mydateR' class="icon"></input>
<div onclick="datetimevalidation()">Click Me</div>
<script>
    function datetimevalidation() {
        var leavedate = new Date(document.getElementById("mydateL").value);
        var arrivedate = new Date(document.getElementById("mydateR").value);
        if (leavedate.getFullYear() == arrivedate.getFullYear() && leavedate.getMonth() == arrivedate.getMonth() && leavedate.getDate() == arrivedate.getDate()) {
            document.write('Please change arrivedate.');
        }
    }
</script>

Leaving: <input type='date' id='mydateL' class="icon"></input>
Returning: <input type='date' id='mydateR' class="icon"></input>
<button onclick="myFunction()">Click me</button>

尝试转换日期对象,比较将起作用:

 function myFunction() 
    {
      var leavedate = new Date(document.getElementById("mydateL").value);
      leavedate = leavedate+ "";
      var arrivedate = new Date(document.getElementById("mydateR").value); 
      arrivedate = arrivedate+ ""; 

      if(leavedate == arrivedate) 
        {        
             alert('Please change arrivedate.');
        }
    }

您没有提供足够的信息来准确回答问题,因此只能给出一般建议。

并非所有使用中的浏览器都支持输入类型日期,因此简单地将用户输入的内容转换为日期对象而不首先验证输入将不是一个可靠的解决方案。

考虑一位英国用户,其日期设置格式为dd/mm/yyyy,输入日期为2015年11月23日。然后使用Date构造函数解析该值。

在Chrome(支持日期输入)中,输入将根据系统设置提供dd/mm/yyyy的提示。输入的属性返回的值将是2015-11-23的字符串,Chrome中的Date构造函数将其解析为本地日期。

在不支持Date输入的Firefox v42中,字符串将完全按照用户输入的方式返回。Firefox将解析2015年11月23日,就像它是mm/dd/yyyy一样,并返回2016年11月11日的日期。

Safari 9也不支持日期输入,并将尝试像Firefox一样将其解析为mm/dd/yyyy,但会返回一个无效的日期(因为没有月23)。

Omniweb 6的功能类似Safari。

因此,"它不起作用"的说法并不奇怪。对于稳健的日期输入,您必须:

  1. 指定用户应输入的格式
  2. 验证输入的值是否为有效日期
  3. 比较这些值

如果输入了有效字符串,则可以直接比较它们是否相等,无需将它们转换为Date对象。然而,如果稍后需要日期对象,如果将日期转换为数字(例如),则比较日期也没有害处

if (+date0 == + date1) {
  // Dates are equal
}

日期必须首先转换为数字,否则==会将它们作为对象进行比较,并且没有两个对象是相等的,因此结果总是错误的,除非d0d1引用了相同的日期对象(如果在OP上有注释,这似乎是问题所在,至少在Chrome中是这样)。