Используя Javascript, как я могу убедиться, что диапазон дат действителен?

В JavaScript, как лучше всего определить, соответствует ли установленная дата допустимым диапазоном?

Примером этого может быть проверка того, является ли пользовательский ввод requestedDate частью следующей действующей рабочей недели. Обратите внимание, что это не просто проверка того, будет ли одна дата больше другой, так как допустимая дата будет равна или больше нижнего конца диапазона, но меньше или равна верхнему концу диапазона.

Ответы

Ответ 1

На самом деле это проблема, которую я видел, прежде всего, в моих работах, и следующий бит кода - это мой ответ на проблему.

// 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 должен быть таким, какой бы диапазон дней вы ни искали. Поэтому, если вы ищете даты, по крайней мере, на одну неделю, тогда это должно быть семь.

Ответ 2

Итак, если я понимаю текущую, вам нужно посмотреть, больше ли одна дата, чем другая.

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

Затем вам нужно проанализировать строки, которые вы получаете из пользовательского интерфейса, с помощью Date.parse, например:

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

Помогает ли это?

Ответ 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.shtml или Google для более подробной информации.