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