Member 12976910 Ответов: 1

Фильтр дат для 30 января, 31 с февраля-01 не работает с использованием javascript


Привет,

Я хотел бы отфильтровать fromDate и toDate.
когда я делаю поиск с fromDate как Jan-30-2017 и toDate как Feb-01-2017, он показывает сообщение "ToDate "не может быть меньше, чем"FromDate".

Примечание:
Senario 1: для каждого года ищите особенно с 30 января по 01 февраля.
Senario 2: для каждого года ищите особенно с 31 января по 01 февраля.

В других случаях работает нормально.

ValidateDate(fromDate,toDate){

var pDay=parseInt(toDtae.substring(0,2),10);
var pMon=parseInt(toDtae.substring(0,2),10);
var pYear=parseInt(toDtae.substring(0,2),10);
var pDate=new Date(pYear,pMon,pDay);

var oDay=parseInt(toDtae.substring(0,2),10);
var oMon=parseInt(toDtae.substring(0,2),10);
var oYear=parseInt(toDtae.substring(0,2),10);
var oDate=new Date(oYear,oMon,oDay);

if(pDate<oDate){
confirm('<s:Text name="labe.dateerrorMessage"/>')
documentation("okButton").disabled=true;
}
}

всякий раз, когда я ищу с 30/31 января по 01 февраля каждый год, он показывает
"ToDate" не может быть меньше, чем "FromDate".

Пример: fromDate:jan302017
обновлена:Feb012017
отбор происходит через каландр.

Что я уже пробовал:

ValidateDate(fromDate,toDate){

var pDay=parseInt(toDtae.substring(0,2),10);
var pMon=parseInt(toDtae.substring(0,2),10);
var pYear=parseInt(toDtae.substring(0,2),10);
var pDate=new Date(pYear,pMon,pDay);

var oDay=parseInt(toDtae.substring(0,2),10);
var oMon=parseInt(toDtae.substring(0,2),10);
var oYear=parseInt(toDtae.substring(0,2),10);
var oDate=new Date(oYear,oMon,oDay);

if(pDate<oDate){
confirm('<s:Text name="labe.dateerrorMessage"/>')
documentation("okButton").disabled=true;
}
}

Nathan Minier

Итак...вы заметили, что анализируете одну и ту же вещь (toDtae), которая не является событием одной из переменных, переданных в функцию, и что ваш выбор оператора игнорирует случай равенства, верно?

CHill60

Это будет решением :-)

Nathan Minier

В этом случае я иду с "может быть".Вы заметите, что каждая функция parseint также применяется к одной и той же подстроке. В принципе, нет ничего правильного.

CHill60

Это очень вежливое описание того, что не так с кодом.

Jochen Arndt

Кроме уже упомянутых ошибок при разборе всегда одни и те же символы для всех частей даты:

По возможности не используйте строки для операций с датой.

Вместо этого используйте собственные типы date, time и datetime.

Создавайте строки только для их отображения. Если вам нужно разобрать строки, содержащие даты, убедитесь, что вы знаете используемый формат.

Это значительно упростит работу с датами и позволит избежать ошибок преобразования.

1 Ответов

Рейтинг:
0

Nathan Minier

Итак, вам нужно простое сравнение дат JavaScript.

function ValiDate(startText,endText) //get it?
{
   var startDate = new Date(startText), 
       endDate = new Date(endText);

   if(startDate.getTime() > endDate.getTime()){
      alert('ZOMG errorz');
      document.getElementById('okButton').disabled = true;
   }
}


Member 12976910

Привет,

Теперь это происходит в обратном случае. Не работать.
Пожалуйста, прочтите вопрос четко

Richard MacCutchan

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

Nathan Minier

Вот что я вам скажу: я просто отредактировал образец, чтобы сделать его менее разумным с точки зрения валидации. Наслаждаться.