web-dev-qa-db-ja.com

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' ?>" /> 
3
Mia

まず、日付をD d.m形式で保存するのをやめる必要があります。クエリはそのデータに基づいてソートすることはできません。

Wyrfelが指摘したように、2つのフィールドを持つためには代替フィールドオプションを使う必要があります。 yy-mm-dd)のように、クエリは正しくソートできます。

投稿した1行のコードに基づいて、これを試してみてください。

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

Datepicker 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 現在の値は、「Live Fetch」セクションの下にあります。

カレンダーの日付をクリックした後に表示されるもの:
enter image description here

視覚的な値と保存された値:
enter image description here

私はそれがコードが実行されるのを見ることがちょうどいいと思うかもしれません、そしてそれが助けになることを願っています.. :)

6
t31os

このページ で 'alternate Field'の例とソースコードを見てください。あなたの代替フィールドを隠しフィールドにしてから、可視フィールドではなく代替フィールドの値をメタデータに保存します。

ああ...もちろん代替フィールドのためのあなたの日付フォーマットは 'yy-mm-dd'であるべきです。

3
wyrfel