【问题标题】:Using Javascript, how do I make sure a date range is valid?使用 Javascript,如何确保日期范围有效?
【发布时间】:2010-09-09 14:14:20
【问题描述】:

在 JavaScript 中,确定提供的日期是否在有效范围内的最佳方法是什么?

这方面的一个例子可能是检查用户输入requestedDate 是否是下一个有效工作周的一部分。请注意,这不仅仅是检查一个日期是否大于另一个日期,因为有效日期将等于或大于范围的下限,而小于或等于范围的上限。

【问题讨论】:

    标签: javascript validation date


    【解决方案1】:

    所以如果我现在理解的话,你需要看看一个日期是否比另一个大。

    function ValidRange(date1,date2)
    {
       return date2.getTime() > date1.getTime();
    }
    

    然后您需要使用 Date.parse 解析从 UI 获取的字符串,如下所示:

    ValidRange(Date.parse('10-10-2008'),Date.parse('11-11-2008'));
    

    这有帮助吗?

    【讨论】:

    • 问题不在于检查一个日期是否大于另一个日期,而是检查一个日期是否在给定的有效日期范围内。例如,如果业务要求是在接下来的 7 天内完成任务,那么您希望确保计划日期小于或等于当前日期的 7 天。
    【解决方案2】:

    这实际上是我在工作中经常看到的一个问题,下面的代码是我对这个问题的回答。

    // checkDateRange - Checks to ensure that the values entered are dates and 
    //     are of a valid range. By this, the dates must be no more than the 
    //     built-in number of days appart.
    function checkDateRange(start, end) {
       // Parse the entries
       var startDate = Date.parse(start);
       var endDate = Date.parse(end);
       // Make sure they are valid
        if (isNaN(startDate)) {
          alert("The start date provided is not valid, please enter a valid date.");
          return false;
       }
       if (isNaN(endDate)) {
           alert("The end date provided is not valid, please enter a valid date.");
           return false;
       }
       // Check the date range, 86400000 is the number of milliseconds in one day
       var difference = (endDate - startDate) / (86400000 * 7);
       if (difference < 0) {
           alert("The start date must come before the end date.");
           return false;
       }
       if (difference <= 1) {
           alert("The range must be at least seven days apart.");
           return false;
        }
       return true;
    }
    

    现在关于这段代码有几点需要注意,Date.parse 函数应该适用于大多数输入类型,但已知在某些格式上存在问题,例如“YYYY MM DD”,因此您应该在使用它之前对其进行测试.但是,我似乎记得大多数浏览器会根据计算机区域设置来解释提供给 Date.parse 的日期字符串。

    此外,86400000 的乘数应该是您要查找的天数范围。因此,如果您正在寻找至少相隔一周的日期,那么它应该是七个。

    【讨论】:

    • 请更新 fromat 的 start 和 end checkDateRange(start, end) 它很难检查
    • let difference = (endDate - startDate) / (86400000 * [n° days]); if (difference &lt;= 1) {inside the range} else {out of range } 这有助于我查看两个日期是否在 x 范围内
    【解决方案3】:
    var myDate = new Date(2008, 9, 16);
    
    // is myDate between Sept 1 and Sept 30?
    
    var startDate = new Date(2008, 9, 1);
    var endDate = new Date(2008, 9, 30);
    
    if (startDate < myDate && myDate < endDate) {
        alert('yes');
        // myDate is between startDate and endDate
    }
    

    您可以将多种格式传递给 Date() 构造函数来构造日期。您还可以使用当前时间构造一个新日期:

    var now = new Date();
    

    并在其上设置各种属性:

    now.setYear(...);
    now.setMonth(...);
    // etc
    

    请参阅http://www.javascriptkit.com/jsref/date.shtmlGoogle 了解更多详情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-14
      • 2011-10-20
      • 2011-06-16
      • 2012-08-28
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多