使用Javascript检查2个日期

时间:2015-11-16 11:26:03

标签: javascript html

我试图检查抵达是否与休假相同,然后它应该显示一个提示框"请更改到达"。

为什么它不能在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>

4 个答案:

答案 0 :(得分:1)

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

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


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

答案 1 :(得分:0)

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

&#13;
&#13;
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>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

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.');
        }

    }

答案 3 :(得分:0)

您尚未提供足够的信息来准确回答问题,因此只能提供一般性建议。

所有正在使用的浏览器都不支持输入类型日期,因此只需将用户输入的任何内容转换为日期对象而不首先验证输入,这将不是一个强大的解决方案。

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

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

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

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

Omniweb 6就像Safari一样。

所以声明&#34;它不起作用&#34;这并不奇怪。要获得强大的日期输入,您必须:

  1. 指定用户应输入的格式
  2. 验证输入的值是否为有效日期
  3. 比较值
  4. 如果输入了有效字符串,则可以直接比较它们的相等性,不需要将它们转换为Date对象。但是,如果以后需要日期对象,那么在比较日期时如果它们被转换为数字就没有坏处,例如。

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

    必须先将日期转换为数字,否则==会将它们作为对象进行比较,并且没有两个对象永远相等,因此除非 d0 d1 引用相同的日期对象(在OP上给出评论,似乎是问题,至少在Chrome中)。