在JavaScript中,确定所提供日期是否在有效范围内的最佳方法是什么?
此示例可能是检查用户输入requestedDate
是否属于下一个有效工作周。请注意,这不仅仅是检查一个日期是否大于另一个日期,因为有效日期等于或大于范围的下限,同时小于或等于范围的上限。
答案 0 :(得分:16)
这实际上是我在工作中看到的一个问题,以下代码是我对问题的回答。
// 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 :(得分:8)
因此,如果我理解当前,您需要查看一个日期是否比另一个更大。
function ValidRange(date1,date2)
{
return date2.getTime() > date1.getTime();
}
然后你需要使用Date.parse解析你从UI获得的字符串,如下所示:
ValidRange(Date.parse('10-10-2008'),Date.parse('11-11-2008'));
这有帮助吗?
答案 2 :(得分:4)
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.shtml或Google。