关于验证:如何使用Javascript确保日期范围有效?

关于验证:如何使用Javascript确保日期范围有效?

Using Javascript, how do I make sure a date range is valid?

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

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


这实际上是我在很多工作中就遇到的问题,下面的代码是我对该问题的答案。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 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应该是您要寻找的天数范围。因此,如果您要查找至少相隔一周的日期,则应为七个。


因此,如果我了解得很清楚,则需要查看一个日期是否大于另一个日期。

1
2
3
4
function ValidRange(date1,date2)
{
   return date2.getTime() > date1.getTime();
}

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

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

有帮助吗?


1
2
3
4
5
6
7
8
9
10
11
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()构造函数以构造日期。您还可以使用当前时间构造一个新日期:

1
var now = new Date();

并在其上设置各种属性:

1
2
3
now.setYear(...);
now.setMonth(...);
// etc

有关更多详细信息,请参见http://www.javascriptkit.com/jsref/date.shtml或Google。


推荐阅读