2013-12-06 3 views
0

У меня есть php-массив строк даты и собственное поле ввода даты html5. У меня есть выход дата массив объекта JSON, чтобы разрешить использование с JavaScript:Проверьте, существует ли дата в объекте JSON

<script> 
var date_array = <?php echo json_encode($aDates); ?>; 
... 

Это дает выход примерно так:

var date_array = { 
    "2013-12-05": "2013-12-05", 
    "2013-12-04": "2013-12-04", 
    "2013-12-03": "2013-12-03" 
    ... 
    }; 

Я использую родной дата поле ввода html5 и я хочу чтобы проверить, что значение, которое пользователь выбрал, существует в объекте json. Похоже, что в (моей версии) хром формат строки даты на входе dd/mm/yyyy, поэтому я предполагаю, что потребуется синтаксический анализ даты.

Вот то, что я до сих пор:

var date_input = $('input#end_date'); 
    date_input.change(function(){ 
     if(jQuery.inArray(date_input.val(), date_array) > -1){ 
      date_input.parent().addClass('has-success'); 
      date_input.parent().removeClass('has-error'); 
     } else { 
      date_input.parent().addClass('has-error'); 
      date_input.parent().removeClass('has-success'); 
     } 
    }); 

Что не работает должным образом. Любые идеи по улучшению?

+0

Значения в 'date_array' не даты. Это все струны. Поэтому вам нужно убедиться, что 'date_input.val()' находится в том же формате, что и ваши строки – CodingIntrigue

+0

date_array не является массивом. используйте 'date_array = [" 2013-12-05 "," 2013-12-04 "," 2013-12-03 "]' вместо – guy777

ответ

1

Я считаю, что поле для ввода даты должен возвращать дату в виде строки в yyyy-mm-dd формате (ref). Для того, чтобы проверить, существует ли дата в date_array объекта вы можете просто:

var date_str = $("input#end_date").val(); 
if (typeof date_array[date_str] != "undefined") { 
    // exists 
} else { 
    // does not exist 
} 
+0

Вы правы. Как сказал @schopy, несмотря на местозаполнитель, значение находится в формате ISO, что упрощает проверку при правильном сравнении. Огромное спасибо, что сейчас работает. – harryg

0

Вы можете создать даты из строки в формате JSON new Date("2013-12-05") и другую дату от ввода пользователя, а затем сравнить их

+0

Вычислительно кажется, что отходы создают новый массив дат из строк в json объект, когда я должен просто сравнить строки, если вход будет в правильном формате. – harryg

+1

@harryg Значение поля ввода в том же формате, что и json на моем хром, даже если заполнитель составляет mm/dd/yyyy. Я только что видел комментарий guy777, и он прав, json - это не массив, это должно быть – andrei

Смежные вопросы