Как в js сравнить две даты

botstars

Здравствуйте. Делаю валидацию и не знаю как сделать сравнение двух дат. У меня есть две переменные datat.val() и datad.val() в которых хранятся дата в таком виде 2014-01-17 Как мне сделать сравнение, что бы datat.val() была больше или равно datad.val() то есть 2014-01-17 > 2014-01-14 это правильно а, 2014-01-17 > 2014-01-19 это не правильно. Большое спасибо
8 ответов

botstars

var firstValue = datat.val().split('-');
var secondValue = datad.val().split('-');
 
 var firstDate=new Date();
 firstDate.setFullYear(firstValue[0],(firstValue[1] - 1 ),firstValue[2]);
 
 var secondDate=new Date();
 secondDate.setFullYear(secondValue[0],(secondValue[1] - 1 ),secondValue[2]);     
 
  if (firstDate > secondDate)
  {
   alert("Первая дата больше");
  }
 else
  {
    alert("Вторая дата больше");
  }


botstars

можно и чуть покороче, без исп-я метода setFullYear:
var firstDate = new Date (firstValue [0], (firstValue [1] - 1 ), firstValue [2]);
и
var secondDate = new Date (secondValue [0], (secondValue [1] - 1 ), secondValue [2]);


botstars

можно и чуть покороче, без исп-я метода setFullYear:
var firstDate = new Date (firstValue [0], (firstValue [1] - 1 ), firstValue [2]);
и
var secondDate = new Date (secondValue [0], (secondValue [1] - 1 ), secondValue [2]);
Что-то совсем валидация не реагирует может что-то неправильно вот функция которая отвечает за эти два поля и чекбокс.
function validateDatad(){ 
        
        var firstValue = datat.val().split('-');
        var secondValue = datad.val().split('-');
        var firstDate = new Date (firstValue [0], (firstValue [1] - 1 ), firstValue [2]);
        var secondDate = new Date (secondValue [0], (secondValue [1] - 1 ), secondValue [2]);
 
        //it's NOT valid
        if(datad.val()==''){
             if
            ( firstDate > secondDate){
               datad.addClass("error");
               datadInfo.text("Вы неверно указали даты");
               datadInfo.addClass("error");
               return false;
               }
              else if (!$('#no_data').is(':checked')){
               datad.addClass("error");
               datadInfo.text("Укажите, до какого числа надо определить помощника!");
               datadInfo.addClass("error");
               return false;
            }
            else  {           
               datad.removeClass("error");
               datadInfo.text("Укажите, до какого числа надо определить помощника! Если это не важно, отметьте это.");
               datadInfo.removeClass("error");
               return true;
            }
        }
            
            else{
                datad.removeClass("error");
            datadInfo.text("Укажите, до какого числа надо определить помощника! Если это не важно, отметьте это.");
            datadInfo.removeClass("error");
            return true;}
        
        
            }
Если чего то не хватет скажите я выложу


botstars

А где определены переменные datat и datad ? Они у вас за функцией где-то в глобальном контексте?


botstars

1. где определения объектов datad и datat ?2. логика функции у вас нарушена представьте, что пользователь ничего не ввёл в поля тогда разделение строки на элементы (строки #3 и #4 вашего кода) - оно бессмысленно и операция установки дат вызовет ошибку исполнения - "неверный формат"3. в общем, СНАЧАЛА проверяете оба поля на формат даты ГГГГ-ММ-ДД, для чего пользуетесь регулярным выражением /^\d{4}\-\d{2}\-\d{2}$/, что переводится как "начало строки, четыре цифры, тире, две цифры, тире, две цифры, конец строки" эта проверка покроет любые неверности ввода, в том числе и пустотуи только ПОТОМ, если значения в оба поля введены верно, вы можете делить эти значения на три элементы по разделителю "-" (уже точно зная, что там как раз три числа и два тире между ними) и ЗАТЕМ уже можете проверять правильность дат с точки зрения "начальная должна быть меньше конечной"всё понятно?если сами не справитесь, дайте HTML-код формы, в том числе и тот элемент её, который отвечает за отметку "неважности"


botstars

1. где определения объектов datad и datat ?2. логика функции у вас нарушена представьте, что пользователь ничего не ввёл в поля тогда разделение строки на элементы (строки #3 и #4 вашего кода) - оно бессмысленно и операция установки дат вызовет ошибку исполнения - "неверный формат"3. в общем, СНАЧАЛА проверяете оба поля на формат даты ГГГГ-ММ-ДД, для чего пользуетесь регулярным выражением /^\d{4}\-\d{2}\-\d{2}$/, что переводится как "начало строки, четыре цифры, тире, две цифры, тире, две цифры, конец строки" эта проверка покроет любые неверности ввода, в том числе и пустотуи только ПОТОМ, если значения в оба поля введены верно, вы можете делить эти значения на три элементы по разделителю "-" (уже точно зная, что там как раз три числа и два тире между ними) и ЗАТЕМ уже можете проверять правильность дат с точки зрения "начальная должна быть меньше конечной"всё понятно?если сами не справитесь, дайте HTML-код формы, в том числе и тот элемент её, который отвечает за отметку "неважности"
помогите ничего не выходит вот как обьявляются переменные
  $(document).ready(function(){
    //global vars
    var form = $("#customForm");
    var title = $("#title");
    var titleInfo = $("#titleInfo");
    var description = $("#description");
    var descriptionInfo = $("#descriptionInfo");
    var datat = $("#datat");
    var datatInfo = $("#datatInfo");
    var price = $("#price");
    var priceInfo = $("#priceInfo");
    var no_data = $("#no_data");
    var datad = $("#datad");
    var datadInfo = $("#datadInfo");
    
    datat.change(validateDatat);
    datad.change(validateDatad);
    no_data.change(validateDatad);
    
    //On blur
    title.blur(validateTitle);
    description.blur(validateDescription);
    datat.blur(validateDatat);
    price.blur(validatePrice);
    datad.blur(validateDatad);
    no_data.blur(validateDatad);
    //On key press
    
    title.*****(validateTitle);
    description.*****(validateDescription);
    datat.*****(validateDatat);
    price.*****(validatePrice);
    datad.*****(validateDatad);
    no_data.*****(validateDatad);
 
    
    //On Submittingfgdf
    form.submit(function(){
        if(  validateTitle() & validateDescription() & validateDatat()  & validateDatad() & validatePrice() )
            return true
        else
            return false;
    });
Дальше идут функции вот html тут конечно много гов.. но сысл такой есть два поля и есть чекбокс. Идет первая дата, чекбокс, вторая дата, смысл такой если пользователь решил что для него две даты одинаковы он выбирает первую дату, а затем просто жмет чекбокс и поле со второй датой просто из чезает. Где-то так.
<div class="rowElem valid_div"><span id="datatInfo">Укажите когда надо выполнить задачу!</span></div>
        <div class="rowElem"><label><div id="span_order"><span class="asterisk">*</span>Когда надо выполнить задачу? </div></label>
     <input type="text" size="7" id="datat" name="data_t" value="<?php echo $data_t;?>" class="date_input">
    <label id="mar_ladel" ><div id="pad_order">Время:</div></label>
     <select name="order_t_h">
    <option <?PHP if( $order_t_h=="06"){echo 'selected="selected"';}?> value="06">06</option>
    <option <?PHP if( $order_t_h=="07"){echo 'selected="selected"';}?> value="07">07</option>
    <option <?PHP if( $order_t_h=="08"){echo 'selected="selected"';}?> value="08">08</option>
    <option <?PHP if( $order_t_h=="09"){echo 'selected="selected"';}?> value="09">09</option>
    <option <?PHP if( $order_t_h=="10"){echo 'selected="selected"';}?> value="10">10</option>
    <option <?PHP if( $order_t_h=="11"){echo 'selected="selected"';}?> value="11">11</option>
    <option <?PHP if( $order_t_h=="12"){echo 'selected="selected"';}?> value="12">12</option>
    <option <?PHP if( $order_t_h=="13"){echo 'selected="selected"';}?> value="13">13</option>
    <option <?PHP if( $order_t_h=="14"){echo 'selected="selected"';}?> value="14">14</option>
    <option <?PHP if( $order_t_h=="15"){echo 'selected="selected"';}?> value="15">15</option>
    <option <?PHP if( $order_t_h=="16"){echo 'selected="selected"';}?> value="16">16</option>
    <option <?PHP if( $order_t_h=="17"){echo 'selected="selected"';}?> value="17">17</option>
    <option <?PHP if( $order_t_h=="18"){echo 'selected="selected"';}?> value="18">18</option>
    <option <?PHP if( $order_t_h=="19"){echo 'selected="selected"';}?> value="19">19</option>
    <option <?PHP if( $order_t_h=="20"){echo 'selected="selected"';}?> value="20">20</option>
    <option <?PHP if( $order_t_h=="21"){echo 'selected="selected"';}?> value="21">21</option>
    <option <?PHP if( $order_t_h=="22"){echo 'selected="selected"';}?> value="22">22</option>
    <option <?PHP if( $order_t_h=="23"){echo 'selected="selected"';}?> value="23">23</option>
    <option <?PHP if( $order_t_h=="00"){echo 'selected="selected"';}?> value="00">00</option>
    <option <?PHP if( $order_t_h=="01"){echo 'selected="selected"';}?> value="01">01</option>
    <option <?PHP if( $order_t_h=="02"){echo 'selected="selected"';}?> value="02">02</option>
    <option <?PHP if( $order_t_h=="03"){echo 'selected="selected"';}?> value="03">03</option>
    <option <?PHP if( $order_t_h=="04"){echo 'selected="selected"';}?> value="04">04</option>
    <option <?PHP if( $order_t_h=="05"){echo 'selected="selected"';}?> value="05">05</option></select>
                <label id="mar_ladel"><div id="pad_order">:</div></label>
                <select name="order_t_m">
                <option value="0">00</option>
                <option <?PHP if( $order_t_m=="10"){echo 'selected="selected"';}?> value="10">10</option>
                <option <?PHP if( $order_t_m=="20"){echo 'selected="selected"';}?> value="20">20</option>
                <option <?PHP if( $order_t_m=="30"){echo 'selected="selected"';}?> value="30">30</option>
                <option <?PHP if( $order_t_m=="40"){echo 'selected="selected"';}?> value="40">40</option>
                <option <?PHP if( $order_t_m=="50"){echo 'selected="selected"';}?> value="50">50</option></select><div>
                
                
                
    
        </div>
        
                <div class="rowElem valid_div"><span id="datadInfo">Укажите, до какого числа надо определить помощника! Если это не важно, отметьте это.</span></div>
                <div class="rowElem valid_div"><input type="checkbox" onclick="showHide('whatever');" id="no_data" value="1" <?php if($no_data==1){echo 'checked="checked"';} ?> name="no_data" /><label><div id="pad_order">Дата исполнения задачи совпадает с датой определения помощника.</div> </label></div>
                <div id="whatever" style="display: block" >
        <div class="rowElem"><label><div id="span_order"><span class="asterisk">*</span>Когда надо определить помощника?</div></label> 
    <input type="text" size="7" id="datad" name="data_d" value="<?php echo $data_d;?>" class="date_input">
     <label id="mar_ladel" ><div id="pad_order">Время:</div></label>
      <select name="order_d_h">
    <option <?PHP if( $order_d_h=="06"){echo 'selected="selected"';}?> value="06">06</option>
    <option <?PHP if( $order_d_h=="07"){echo 'selected="selected"';}?> value="07">07</option>
    <option <?PHP if( $order_d_h=="08"){echo 'selected="selected"';}?> value="08">08</option>
    <option <?PHP if( $order_d_h=="09"){echo 'selected="selected"';}?> value="09">09</option>
    <option <?PHP if( $order_d_h=="10"){echo 'selected="selected"';}?> value="10">10</option>
    <option <?PHP if( $order_d_h=="11"){echo 'selected="selected"';}?> value="11">11</option>
    <option <?PHP if( $order_d_h=="12"){echo 'selected="selected"';}?> value="12">12</option>
    <option <?PHP if( $order_d_h=="13"){echo 'selected="selected"';}?> value="13">13</option>
    <option <?PHP if( $order_d_h=="14"){echo 'selected="selected"';}?> value="14">14</option>
    <option <?PHP if( $order_d_h=="15"){echo 'selected="selected"';}?> value="15">15</option>
    <option <?PHP if( $order_d_h=="16"){echo 'selected="selected"';}?> value="16">16</option>
    <option <?PHP if( $order_d_h=="17"){echo 'selected="selected"';}?> value="17">17</option>
    <option <?PHP if( $order_d_h=="18"){echo 'selected="selected"';}?> value="18">18</option>
    <option <?PHP if( $order_d_h=="19"){echo 'selected="selected"';}?> value="19">19</option>
    <option <?PHP if( $order_d_h=="20"){echo 'selected="selected"';}?> value="20">20</option>
    <option <?PHP if( $order_d_h=="21"){echo 'selected="selected"';}?> value="21">21</option>
    <option <?PHP if( $order_d_h=="22"){echo 'selected="selected"';}?> value="22">22</option>
    <option <?PHP if( $order_d_h=="23"){echo 'selected="selected"';}?> value="23">23</option>
    <option <?PHP if( $order_d_h=="00"){echo 'selected="selected"';}?> value="00">00</option>
    <option <?PHP if( $order_d_h=="01"){echo 'selected="selected"';}?> value="01">01</option>
    <option <?PHP if( $order_d_h=="02"){echo 'selected="selected"';}?> value="02">02</option>
    <option <?PHP if( $order_d_h=="03"){echo 'selected="selected"';}?> value="03">03</option>
    <option <?PHP if( $order_d_h=="04"){echo 'selected="selected"';}?> value="04">04</option>
    <option <?PHP if( $order_d_h=="05"){echo 'selected="selected"';}?> value="05">05</option></select>
                <label id="mar_ladel" ><div id="pad_order">:</div></label>
                <select name="order_d_m">
                <option value="00">00</option>
                <option <?PHP if( $order_d_m=="10"){echo 'selected="selected"';}?> value="10">10</option>
                 <option <?PHP if( $order_d_m=="20"){echo 'selected="selected"';}?> value="20">20</option>
                <option <?PHP if( $order_d_m=="30"){echo 'selected="selected"';}?> value="30">30</option>
                <option <?PHP if( $order_d_m=="40"){echo 'selected="selected"';}?> value="40">40</option>
                <option <?PHP if( $order_d_m=="50"){echo 'selected="selected"';}?> value="50">50</option></select></div>
                
     </div>
А как сделать регулярку если формат может быть такой 2014-01-16 и такой 2014-01-8


botstars

вместо /^\d{4}\-\d{2}\-\d{2}$/ напишите /^\d{4}\-\d{2}\-\d{1,2}$/


botstars

вместо /^\d{4}\-\d{2}\-\d{2}$/ напишите /^\d{4}\-\d{2}\-\d{1,2}$/
Я это сделал kalabuni Я Вас очень прошу посмотрите эту тему, ну очень надо сегодня сделать, пожалуйста, пожалуйста, пожалуйста Каким способом можно найти конфликт двух форм Просто ну очень прям дым из ушей.