Convertire il formato jQuery Datepicker nel formato Data SQL

3 mar 2011, 19:46:34
Visualizzazioni: 18.3K
Voti: 3

Ho impostato il formato jQuery Datepicker su D d.m. che viene visualizzato come Th 3.3. per un campo meta personalizzato che voglio usare per ordinare i post. In SQL, il campo meta personalizzato viene salvato come D d.m.

Vorrei visualizzare il formato D d.m. sul front end ma memorizzarlo come mm-dd-yy o 03-03-2011 nel mio database SQL.

Qualche idea?

Il mio campo di input per il campo meta personalizzato 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' ?>" />
2
Commenti

Votato per chiudere. Questa non è una domanda su WordPress. Voto per spostarla su SO dato che riguarda più in generale la formattazione e manipolazione delle date.

John P Bloch John P Bloch
3 mar 2011 20:07:54

@John P Bloch... Ho bisogno di costruire una query personalizzata per i post in WordPress che dipende esclusivamente da quel formato di data. Quindi se non è il forum giusto, dimmi dove posso andare a fare la domanda.

Mia Mia
3 mar 2011 20:12:42
Tutte le risposte alla domanda 2
1

Innanzitutto dovrai smettere di memorizzare le date nel formato D d.m, le query non saranno in grado di ordinare i dati basandosi su quel formato.

Come ha sottolineato wyrfel, dovrai utilizzare l'opzione del campo alternativo per avere due campi: uno che mostra il formato grazioso (o quello da te scelto) della data, e un altro che contiene il valore memorizzato nel database (in un formato che le query possono ordinare correttamente, come yy-mm-dd).

Basandoci sulla riga di codice che hai postato, prova così..

PHP/HTML: (per sostituire il codice che hai postato)

<?php 
$date_valid = false;
if( isset( $_POST[$result->field_name] ) ) {
    $date_parts = explode( '-', $_POST[$result->field_name] );
    $date_valid = ( 3 == count( $date_parts ) ) 
        // Valida la data - checkdate restituisce 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: (prendi solo ciò che ti serve da questo)

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

In questo modo tutte le tue date verranno memorizzate nel formato yy-mm-dd, ma l'utente vedrà la data nel formato D d.m.

Ho testato questo approccio localmente e sono riuscito a ottenere la funzionalità necessaria. Ecco alcune screenshot della mia pagina di opzioni del tema che utilizza un campo data con il formato da te scelto (il mio codice era ovviamente leggermente diverso da quanto sopra, ma l'approccio era lo stesso).

Selezione di una data:
Visualizzazione della selezione data I valori correnti si trovano in basso sotto la sezione "Live Fetch".

Cosa vedi dopo aver cliccato una data nel calendario:
Risultato dopo selezione data

Valori visualizzati e memorizzati:
Confronto valori visualizzati e memorizzati

Ho pensato che potesse essere utile vedere il codice messo in pratica e spero che questo aiuti.. :)

4 mar 2011 17:29:28
Commenti

@ t31os... grazie mille. È stato di grandissimo aiuto!!!

Mia Mia
5 mar 2011 11:19:12
3

per favore consulta l'esempio e il codice sorgente del 'campo alternativo' su questa pagina. Imposta il tuo campo alternativo come nascosto e poi salva il valore del campo alternativo anziché quello visibile nei tuoi metadati.

Ah...ovviamente il formato della data per il campo alternativo dovrebbe essere 'yy-mm-dd'.

4 mar 2011 07:36:19
Commenti

Grazie mille. Dopo ore di ricerche su Google ho trovato la stessa soluzione. Sto cercando di farla funzionare ora. Sto usando questo campo per un modulo frontend. Una volta che l'utente compila il modulo, i risultati vengono visualizzati nella pagina successiva. E mostra il formato della data sbagliato. P.S. Ho provato a votarti positivamente ma non ho abbastanza punti per farlo.

Mia Mia
4 mar 2011 13:22:14

@Mia: Grazie. Puoi sempre votarmi più tardi ;-) (se non l'hai già fatto). BTW...potresti convertire il formato della data anche in PHP, ma penso che la soluzione sopra sia più semplice.

wyrfel wyrfel
4 mar 2011 15:38:14

@wyrfel L'ho già fatto. Ora sono idonea a votare. Quindi hai il mio voto! Inoltre, alla fine sono riuscita a farlo funzionare. Dovrò convivere con il formato di output sbagliato finché non capisco come sistemarlo. Grazie ancora.

Mia Mia
4 mar 2011 15:59:50