如何在Javascript中检查日期范围

5
在下面的代码中,我想验证日期是否在2017年2月8日至2017年5月8日期间,并弹出警告,提示日期不在范围内。
<script type="text/javascript">
        function validate()
        {

        today = new Date();
        fromdt= new Date("02/08/2017");
        todate=new Date("05/08/2017");

        if( document.myForm.entrydt.value == "" )
           {
             alert( "Please Select Entry Date!" );
             document.myForm.entrydt.focus() ;
             return false;
           }
           else if(!document.myForm.entrydt.value.match(letters3))
          {
          alert("Entry Date: Enter Only Date Format i.e DD/MM/YYYY");
          document.myForm.entrydt.focus() ;
                return false;
            }
            else if (!document.myForm.entrydt.value.today > startdt && !document.myForm.entrydt.value.today < todate)
            {
            alert("Entry Date: Enter Date in Proper Range");
          document.myForm.entrydt.focus() ;
                return false;
            }
        return( true );
        }
        </script>

==============================================================================

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" class="form-inline" role="form" name="myForm" id="myForm" onsubmit="return(validate());">
        <div id="" class="container" >
                            <div class="form-group">
                                <label for="entrydt">Entry Date</label>=
                                <input class="form-control" style='font-weight:bold;text-transform:uppercase;' id="entrydt" type="text" name="entrydt" style='' placeholder="DD/MM/YYYY" value="" size="10">
                            </div>
            </div> 
        </form>

请查阅Date构造函数的文档以了解接受的格式。同时请记住,Date实际上包括日期和时间,因此您需要考虑到这一点来确定您的范围的结束时间。 - jcaron
你的问题是什么? - Ataur Rahman Munna
请注意,new Date("02/08/2017") 可能会被解析为 2017 年 2 月 8 日。从您的帖子中无法确定它应该被视为 2 Aug 2017 还是 8 Feb 2017。请参见标记的重复内容。 - RobG
2个回答

6

使用new Date().getTime()可以得到毫秒级别的时间戳,以长整型数字形式表示,方便进行数值比较。

var today = new Date().getTime(); // 1501653935994
var from = new Date("02/08/2017").getTime(); // gives 1486492200000
var to = new Date("05/08/2017").getTime();

if(today >= from && today <= to) {
   // your code goes here
}

你正在依赖于实现相关的解析。使用 getTime 是不必要的。 - RobG
但是先生,我们如何在这个语法中编写else if (!document.myForm.entrydt.value.today > startdt && !document.myForm.entrydt.value.today < todate)? - Kirankumar Gajanan Gawade
@KirankumarGajananGawade 那么在比较之前,您应该将输入值转换为日期:var inputDate = new Date(document.myForm.entrydt.value.today)。如果日期未以有效格式输入,您可能需要在其周围放置try/catch。事实上,您应该给出输入type="date"并利用内置的日期选择器和验证。 - Joe Maffei

5
new Date().getTime()

返回毫秒级时间戳。

var today = new Date().getTime();
var from = new Date("02/08/2017").getTime();
var to = new Date("05/08/2017").getTime();
var withinRange = today >= from && today <= to;

你可以使用一个非常优秀的Javascript库:moment.js,它提供了比较日期的帮助函数。 只需设置一个moment变量:var mmtDate = moment(new Date()); 设置比较日期:var theDate = moment('2017-08-15'); 最后使用方法:var before = theDate.isBefore(mmtDate) ? true : false; 希望这能帮到你。 - Jean-Luc Aubert
谢谢你的提示 - 但为什么不把它发布为答案呢? - Franz Deschler
@FranzDeschler——因为发布“使用库X”不是一个答案,而且在没有提供格式的情况下解析字符串容易出错。 - RobG
但是先生,我们如何按照这个语法写else if (! document.myForm.entrydt.value.today> startdt &&! document.myForm.entrydt.value.today <todate)。 - Kirankumar Gajanan Gawade
(!(new Date().getTime() > startdt) && !(new Date().getTime() < todate)) - Selvakumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接