Преобразование формата jQuery Datepicker в формат даты SQL


Я установил формат jQuery Datepicker в D d.m., отображаемый как Th 3.3. для пользовательского мета-поля, которое я хочу использовать для сортировки сообщений. В SQL пользовательское мета-поле сохраняется как D d.m.

Я хотел бы отобразить формат D d.m. на интерфейсе и сохранить его как mm-dd-yy или 03-03-2011 в моей базе данных SQL.

Есть идеи?

Мое поле ввода для пользовательского мета-поля cp_date:

 <input name="<?php echo $result->field_name; ?>" id="<?php echo $result->field_name; ?>" type="text" minlength="2" value="<?php if(isset($_POST[$result->field_name])) echo $_POST[$result->field_name]; ?>" autocomplete="off" class="datepicker <?php if($result->field_req) echo 'required' ?>" /> 
Author: Mia, 2011-03-03

2 answers

Во-первых, вам нужно будет прекратить хранить даты в формате D d.m, запросы не смогут сортировать на основе этих данных.

Как указал вирфель, вам нужно будет использовать опцию альтернативного поля, чтобы иметь два поля, одно из которых показывает красивый (или выбранный вами) формат даты, а другое содержит значение, которое вы храните в БД (в формате, по которому запросы могут правильно сортировать, например yy-mm-dd).

Основываясь на одной строке кода, которую вы опубликовали, дайте этому выстрел..

PHP/HTML: (чтобы заменить опубликованный вами код)

<?php 
$date_valid = false;
if( isset( $_POST[$result->field_name] ) ) {
    $date_parts = explode( '-', $_POST[$result->field_name] );
    $date_valid = ( 3 == count( $date_parts ) ) 
        // Validate date - checkdate returns true/false
        ? checkdate( $date_parts[1], $date_parts[2], $date_parts[0] ) 
        : false;
}
$display_date = ( $date_valid ) ? date( 'D d.m', strtotime( implode( '-', $date_parts ) ) ) : '';
$storage_date = ( $date_valid ) ? $_POST[$result->field_name] : '';
$req =  $result->field_req ? ' required' : '';
?>
<input type="text" value="<?php echo $display_date; ?>" class="datepicker<?php echo $req ?>" />
<input name="<?php echo $result->field_name; ?>" type="hidden" value="<?php echo $storage_date; ?>" class="date_alternate" />

JQuery для выбора даты: (просто извлеките из этого то, что вам нужно)

jQuery(function($) {
    $( ".datepicker" ).datepicker({
        dateFormat: 'D d.m',
        altField: ".date_alternate",
        altFormat: "yy-mm-dd"
    });
});

Таким образом, все ваши даты сохраняются в формате yy-mm-dd, но пользователь видит дату в D d.m.

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

Выбор даты:
enter image description here Текущие значения находятся внизу в разделе "Живая выборка".

Что вы видите после нажатия на дату в календаре:
enter image description here

Визуальные и сохраненные значения:
enter image description here

Я подумал, что было бы просто приятно увидеть, как код применяется на практике, и надеюсь, что это поможет..:)

 6
Author: t31os, 2011-03-05 17:04:24

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

Ах... конечно, ваш формат даты для альтернативного поля должен быть "гг-мм-дд".

 3
Author: wyrfel, 2011-03-04 05:36:19