Используя Javascript, как мне убедиться, что диапазон дат действителен? - PullRequest
14 голосов
/ 16 сентября 2008

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

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

Ответы [ 3 ]

16 голосов
/ 16 сентября 2008

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

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

8 голосов
/ 16 сентября 2008

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

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

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

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

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

4 голосов
/ 16 сентября 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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...