2016-08-20 3 views
0

Здесь я хотел бы провести сравнение между текущей датой и датой ввода.Формирование даты и сравнение Javascript

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $("#date").change(function(){ 
      var realDate = new Date(); 
      var startDate = new Date($('#date').val()); 
      if (realDate >= startDate) { 
       $('#infobros').removeClass('hidden'); 
      }else{ 
       $('#infobros').addClass('hidden'); 
      } 
     }); 
    }); 
function validateForm(){ 
    var realDate = new Date(); 
    var startDate = new Date($('#date').val()); 

    if (realDate >= startDate){ 
     alert('Please Change your date Start'); 
     $('#date').focus(); 
     return false; 
    } 
    } 
</script> 

там я хочу, чтобы мой идентификатор #infobors удалить класс hidden, когда я входной startDate его к низкому уровню более чем мой realDate или если startDate же или больше, чем realDate.

но, теперь, если я ввещу ту же дату в текущую дату #infobros все еще выполняет.

BTW: мой формат STARTDATE = YYYY-MM-DD

, но я не знаю, формат моего realDate

Я надеюсь, что кто-то может мне помочь, и сделать мой сценарий работы ..

кстати: это мой формат realDate:

photo

может кто-то помочь мне изменить, чтобы: YYYY-MM-DD

+0

'предупреждение (realDate)' и увидеть формат вашего realDate и сравнить дату попробовать это http://stackoverflow.com/ questions/3004178/how-to-compare-two-date-values-with-jquery –

+0

проверьте свои даты в консоли. 'console.log (realDate, 'realDate'); console.log (startDate, 'startDate'); console.log (realDate> = startDate, 'is ture?'); ' – Grund

+0

и, возможно, попробуйте' ', но это изменит ваш формат ввода – Grund

ответ

0

Ваша дата comparission должен работать, если дата ввода правильно, лучше использовать некоторые виджет ввода для даты или ввода типа = «даты». Я создал рабочий пример, изменив свой код.

/** 
*Function checks date is in past or future 
*/ 
function checkDate(){ 

    var realDate = new Date(); 
    var startDate = new Date($('#date').val()); 
    if (realDate >= startDate) { 
     $('#infobros').removeClass('hidden'); 
     return false;//date in past 
    }else{ 
     $('#infobros').addClass('hidden'); 
     return true;//date in future 
    } 
} 

function validateForm(e){ 

    //use it on submit 
    if (checkDate()){ 
     return true; //here date is in future so ok 
    } 
    else 
     { 
      e.preventDefault(); //stop submitting form 
      alert("You date should be future date"); 
      return false; 
     } 
} 


$(document).ready(function(){ 
    $("#date").change(function(){ 

     checkDate();//use it on change 

    }); 

    $("form").submit(validateForm);//set on submit event 

    checkDate();//use it after start of page 
}); 

Здесь работает код в plunker - https://plnkr.co/edit/fGGgHSiYcG1gqugLRToX?p=preview.

+0

ahh oke, но как насчет предупреждения? его не следует всплывать, когда я вводил ту же дату. –

+0

У вас в вашем коде realDate> = startDate, поэтому он также означает ==.Вы хотите, чтобы предупреждение не показывалось, когда даты равны? Если так, я изменю код, но я должен знать, что это то, что вам нужно. –

+0

Не показывать оповещение на те же даты change> = to> in if statemant –

0

Вот функция dateUtility, которую я написал. Я знаю, что в нем есть дыры, потому что он окружен другим кодом, но он дает вам много чего вам нужно. Он даже заботится о високосных годах и пяти международных моделях дат!

function setDateComponents(regularExpressionResultsArray){ 
    if (this.dateUtilDatePattern == "M/d/yyyy" || this.dateUtilDatePattern == "MM/dd/yyyy") { 
     this.month = parseInt(eliminateLeadingZero(regularExpressionResultsArray[ 1 ])) -1; 
     this.day = parseInt(eliminateLeadingZero(regularExpressionResultsArray[ 2 ])); 
     this.year = parseInt(regularExpressionResultsArray[ 3 ]); 
     return; 
    } 

    if (this.dateUtilDatePattern == "d/M/yyyy" || this.dateUtilDatePattern == "dd/MM/yyyy") { 
     this.day = parseInt(eliminateLeadingZero(regularExpressionResultsArray[ 1 ])); 
     this.month = parseInt(eliminateLeadingZero(regularExpressionResultsArray[ 2 ])) - 1; 
     this.year = parseInt(regularExpressionResultsArray[ 3 ]); 
     return; 
    } 

    if (this.dateUtilDatePattern == "d.M.yyyy" || this.dateUtilDatePattern == "dd.MM.yyyy") { 
     this.day = parseInt(eliminateLeadingZero(regularExpressionResultsArray[ 1 ])); 
     this.month = parseInt(eliminateLeadingZero(regularExpressionResultsArray[ 2 ])) - 1; 
     this.year = parseInt(regularExpressionResultsArray[ 3 ]); 
     return; 
    } 

    alert("Date utility. Date pattern not implemented " + this.dateUtilDatePattern); 
} 

function defineRegularExpression(){ 
    if ((this.dateUtilDatePattern == "M/d/yyyy") || 
     (this.dateUtilDatePattern == "d/M/yyyy") || 
     (this.dateUtilDatePattern == "dd/MM/yyyy") || 
     (this.dateUtilDatePattern == "MM/dd/yyyy")) { 
     this.separator = "/"; 
     this.regExp = /^([0-9]{1,2})\/([0-9]{1,2})\/(\d\d\d\d)$/; 
     return; 
    } 
    if ((this.dateUtilDatePattern == "d.M.yyyy") || 
     (this.dateUtilDatePattern == "dd.MM.yyyy")) { 
     this.separator = "."; 
     this.regExp = /^([0-9]{1,2})\.([0-9]{1,2})\.(\d\d\d\d)$/; 
     return; 
    } 

    alert("Date utility. Date pattern not implemented " + this.dateUtilDatePattern); 
} 


function generateDateObject(dateAsString){ 

    // assert if the pattern matches 
    if(dateAsString.search(this.regExp) == -1){ 
     throw new DateUtilityException(this.ERROR_NOT_A_DATE); 
    } 

    // parse the string 
    var regularExpressionResultsArray = this.regExp.exec(dateAsString); 

    // set date components for datePattern 
    this.setDateComponents(regularExpressionResultsArray); 
    // Create the date object, and validate numbers are reasonable 
    if((-1 < this.month) && (this.month < 12)) { 
     if((0 < this.day) && (this.day < 32)) { 
      var goodDate = performThoroughComponentAnalysis(this.month,this.day,this.year); 
      if (goodDate) {     
       this.dateObject = new Date(new Number(this.year), new Number(this.month), new Number(this.day));           
       // standardize the format 
       this.generateStandardizedDateAsStringAndDateComponents(); 
       return true; 
      } 
     } 
    } 
    throw new DateUtilityException(this.ERROR_NOT_A_DATE); 
} 

function performThoroughComponentAnalysis(month,day,year) { 
    var monthB1 = month + 1; //Use month range 1-12 

    // FEB 
    if (monthB1 == 2) { 
     // determine if leap year 
     var div4 = false; 
     var div100 = false; 
     var div400 = false; 
     var leapyear = false; 
     if ((year % 4) == 0) { 
      div4 = true; 
     }    
     if ((year % 100) == 0) { 
      div100 = true; 
     } 
     if ((year % 400) == 0) { 
      div400 = true; 
     } 

     if (div4) { 
      leapyear=true; 
      if ((div100)&&(!div400)) { 
       leapyear=false; 
      } 
     } 

     if (leapyear) { 
      if (day > 29) { 
       return false; 
      } 
     } 
     else { 
      if (day > 28) { 
       return false; 
      } 
     } 
    } 

    // 31 day months  
    if ((monthB1 == 1)||(monthB1 == 3)||(monthB1 == 5)||(monthB1 == 7)||(monthB1 == 8)||(monthB1 == 10)||(monthB1 == 12)) { 
     if (day > 31) { 
      return false; 
     } 
    } 

    // 30 day months 
    if ((monthB1 == 4)||(monthB1 == 6)||(monthB1 == 9)||(monthB1 == 11)) { 
     if (day > 30) { 
      return false; 
     } 
    } 
    return true; 
} 
+0

кстати. Пользователи в мире не будут вводить ГГГГ-ММ-ДД. Я рекомендую использовать один из 5 в коде. – javaMoca

+0

его oke, там я использую datepicker, поэтому им нужно только выбрать его, но спасибо за предложение –

+0

Нет, нет, если у нас есть правильный формат даты, тогда сравнение объектов Date будет работать без таких комбинаций. Если нам нужно что-то лучше, используйте http://momentjs.com/ –

0

Если все, что вы просите, как сравнить даты, то его

if(realDate.getTime() >= startDate.getTime()) { 
    $('#infobros').removeClass('hidden'); 
}else{ 
    $('#infobros').addClass('hidden'); 
}