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

StackOverflow https://stackoverflow.com/questions/73971

  •  09-06-2019
  •  | 
  •  

Вопрос

Как в 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 Функция должна работать для большинства типов ввода, но известно, что возникают проблемы с некоторыми форматами, такими как «ГГГГ ММ ДД», поэтому вам следует проверить это перед ее использованием.Однако я, кажется, помню, что большинство браузеров интерпретируют строку даты, указанную в Date.parse, на основе настроек региона компьютера.

Кроме того, множитель для 86400000 должен соответствовать диапазону дней, который вы ищете.Так что, если вы ищете свидания с разницей как минимум в одну неделю, тогда их должно быть семь.

Другие советы

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

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

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

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

Это помогает?

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 Больше подробностей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top