【问题标题】:Check if date is in the past Javascript检查日期是否在过去 Javascript
【发布时间】:2012-01-08 11:13:49
【问题描述】:

所有, 我正在为日期选择器使用 jQuery UI。尽管用户输入的日期是过去的,但我正在尝试使用 javascript 检查。这是我的表单代码:

<input type="text" id="datepicker" name="event_date" class="datepicker">

那么我将如何使用 Javascript 进行检查以确保它不是过去的日期?谢谢

【问题讨论】:

    标签: javascript jquery jquery-ui validation date


    【解决方案1】:

    $('#datepicker').datepicker().change(evt => {
      var selectedDate = $('#datepicker').datepicker('getDate');
      var now = new Date();
      now.setHours(0,0,0,0);
      if (selectedDate < now) {
        console.log("Selected date is in the past");
      } else {
        console.log("Selected date is NOT in the past");
      }
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
    <input type="text" id="datepicker" name="event_date" class="datepicker">

    【讨论】:

    • 单线:if ($('#datepicker').datepicker('getDate') &lt; new Date) { ... }。使用 new 关键字调用函数时可以省略括号。
    • 您可以跳过now 变量。通过使用(selectedDate.getTime() &lt; Date.now())
    • @MiguelTrias:当然。这让读者更清楚一点。
    • 如果你只看日期(没有时间),那么你应该像这样var now = ( new Date() ).setHours(0,0,0,0);
    • @IvanYurchenko:.val() 返回一个字符串,即&lt;input&gt; 中的内容。 .datepicker('getDate') 返回一个 Date 对象。
    【解决方案2】:
    var datep = $('#datepicker').val();
    
    if(Date.parse(datep)-Date.parse(new Date())<0)
    {
       // do something
    }
    

    【讨论】:

      【解决方案3】:

      为了使答案更易于重用,而不仅仅是日期选择器更改功能,您可以创建一个原型来为您处理。

      // safety check to see if the prototype name is already defined
      Function.prototype.method = function (name, func) {
          if (!this.prototype[name]) {
              this.prototype[name] = func;
              return this;
          }
      };
      Date.method('inPast', function () {
          return this < new Date($.now());// the $.now() requires jQuery
      });
      
      // including this prototype as using in example
      Date.method('addDays', function (days) {
          var date = new Date(this);
          date.setDate(date.getDate() + (days));    
          return date;
      });
      

      如果你不喜欢安全检查,你可以使用传统的方式来定义原型:

      Date.prototype.inPast = function(){
          return this < new Date($.now());// the $.now() requires jQuery
      }
      

      示例用法

      var dt = new Date($.now());
      var yesterday = dt.addDays(-1);
      var tomorrow = dt.addDays(1);
      console.log('Yesterday: ' + yesterday.inPast());
      console.log('Tomorrow: ' + tomorrow.inPast());
      

      【讨论】:

        【解决方案4】:

        只需将日期转换为毫秒并减去

        let givenDate1 =   new Date("10/21/2001")  // Past Date
        let givenDate2 =   new Date("10/21/2050") // future Date
        

        如果 diff 为 ,则给定日期为 PAST

         let diff = new Date().getTime() - givenDate1.getTime();
          if (diff > 0) {
             console.log('Given Date givenDate1 is in Past');
           }
        

        如果差异是,那么给定日期是未来

         let diff = new Date().getTime() - givenDate2.getTime();
          if (diff < 0) {
             console.log('Given Date givenDate2 is in Future');
           }
        

        【讨论】:

        • 你真的需要 new Date($.now()) 吗?和 new Date() 不一样吗?
        • @AlexandruEftimie,是的,你是对的,两者都是一样的。不需要做 new Date($.now())
        【解决方案5】:
        function isPrevDate() {
            alert("startDate is " + Startdate);
            if(Startdate.length != 0 && Startdate !='') {
                var start_date = Startdate.split('-');
                alert("Input date: "+ start_date);
                start_date=start_date[1]+"/"+start_date[2]+"/"+start_date[0];
                alert("start date arrray format " + start_date);
                var a = new Date(start_date);
                //alert("The date is a" +a);
                var today = new Date();
                var day = today.getDate();
                var mon = today.getMonth()+1;
                var year = today.getFullYear();
                today = (mon+"/"+day+"/"+year);
                //alert(today);
                var today = new Date(today);
                alert("Today: "+today.getTime());
                alert("a : "+a.getTime());
                if(today.getTime() > a.getTime() )
                {
                    alert("Please select Start date in range");
                    return false;
                } else {
                    return true;
                }
            }
        }
        

        【讨论】:

        • var Startdate 从何而来?
        猜你喜欢
        • 1970-01-01
        • 2011-03-18
        • 1970-01-01
        • 2011-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多