web-dev-qa-db-fra.com

Conversion du format jQuery Datepicker au format de date SQL

Je règle le format jQuery Datepicker sur D d.m. affiché sous la forme Th 3.3. pour un champ méta personnalisé que je veux utiliser pour trier les messages. En SQL, le champ méta personnalisé est enregistré sous le nom D d.m.

Je voudrais afficher le D d.m. format sur le front-end et enregistrez-le sous le format mm-jj-aa ou 03-03-2011 dans ma base de données SQL.

Des idées?

Mon champ de saisie pour le champ méta personnalisé 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' ?>" /> 
3
Mia

Premièrement, vous devez arrêter de stocker les dates au format D d.m. Les requêtes ne pourront pas être triées en fonction de ces données.

Comme l'a souligné wyrfel, vous devez utiliser l'option de champ alternatif pour avoir deux champs, l'un indiquant le joli format de date (ou celui que vous avez choisi) et l'autre contenant la valeur stockée dans la base de données (dans un format les requêtes peuvent trier correctement, comme yy-mm-dd).

Sur la base de la ligne de code que vous avez postée, tentez votre chance.

PHP/HTML: (pour remplacer le code que vous avez posté)

<?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" />

Datepicker jQuery: (tirez simplement ce dont vous avez besoin)

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

Ainsi, toutes vos dates sont stockées au format yy-mm-dd, mais l'utilisateur la voit au format D d.m.

J'ai testé cette approche localement et j'ai pu obtenir les fonctionnalités nécessaires. Voici quelques captures d'écran de ma page d'options de thème utilisant un champ de date et le format de date choisi (mon code était évidemment un peu différent de ce qui précède, mais l'approche était la même).

Sélection d'une date:
enter image description here Les valeurs actuelles sont en bas dans la section "Live Fetch".

Ce que vous voyez après avoir cliqué sur une date dans le calendrier:
enter image description here

Valeurs visuelles et mémorisées:
enter image description here

Je pensais que ce serait peut-être agréable de voir le code mis en pratique et j'espère que cela aidera .. :)

6
t31os

veuillez consulter l'exemple du "champ alternatif" et le code source sur cette page . Faites de votre champ alternatif un champ caché, puis enregistrez la valeur du champ alternatif plutôt que celle visible dans vos métadonnées.

Ahh ... bien sûr, votre format de date pour le champ alternatif devrait être "aa-mm-jj".

3
wyrfel