web-dev-qa-db-ja.com

カスタムフィールドの値の日付をUNIXのタイムスタンプの問題に変換する

何らかの理由で、メタフィールドに格納されている日付値をunixタイムスタンプに変換することができません(また元に戻す)。日付を文字列として保存してもうまくいきますが、strtotimeを使ってタイムスタンプに変換しても値は保存されません。

私の作業コードは次のようになります。

<?php

add_action( 'add_meta_boxes', 'rs_add_date' );
function rs_add_date() {
    add_meta_box( 'rs_add_date', 'Date', 'rs_add_date_create_meta_box', 'concerts', 'normal', 'high' );
}
function rs_add_date_create_meta_box( $post ) {
    $date = get_post_meta($post->ID, 'rs_date', true);
    echo 'Choose a date for the event';
    wp_nonce_field( plugin_basename(__FILE__), 'rs_date_nonce');
?>
    <p>Date (dd/mm/yyyy) <input type="text" name="rs-date" id="rs-date" value="<?php echo $date; ?>"></p>
<?php
}


// Save the new meta

add_action('save_post', 'rs_date_save_meta');
function rs_date_save_meta( $post_id ) {

    if(!wp_verify_nonce( $_POST['rs_date_nonce'], plugin_basename(__FILE__) ) )
        return;
    if(!current_user_can('edit_posts') )
        return;
    $date = $_POST['rs-date'];
    update_post_meta($post_id, 'rs_date', $date);
}
?>

しかし、私がこれを次のように変更してもうまくいきません。

<?php
add_action( 'add_meta_boxes', 'rs_add_date' );
function rs_add_date() {
    add_meta_box( 'rs_add_date', 'Date', 'rs_add_date_create_meta_box', 'concerts', 'normal', 'high' );
}
function rs_add_date_create_meta_box( $post ) {
    $date = get_post_meta($post->ID, 'rs_date', true);
    $date = time("d/m/Y", $date);
    echo 'Choose a date for the event';
    wp_nonce_field( plugin_basename(__FILE__), 'rs_date_nonce');
?>
    <p>Date (dd/mm/yyyy) <input type="text" name="rs-date" id="rs-date" value="<?php echo $date; ?>"></p>
<?php
}


// Save the new meta

add_action('save_post', 'rs_date_save_meta');
function rs_date_save_meta( $post_id ) {

    if(!wp_verify_nonce( $_POST['rs_date_nonce'], plugin_basename(__FILE__) ) )
        return;
    if(!current_user_can('edit_posts') )
        return;
    $date = $_POST['rs-date'];
    $date = strtotime($date);
    update_post_meta($post_id, 'rs_date', $date);
}
?>

ここに私の頭を掻くこと!乾杯

2
Richard Sweeney

http://www.php.net/manual/en/datetime.formats.date.php を見てくださいstrtotimeがDDを変換するとは思わない/ MM/YYYYが正しく時間を計ります。

ただし、MM/DD/YYYYまたはYYYY/MM/DDは実行できます。

YYYY/MM/DDの日付形式を使ってみてください

それともあなたの好みに合わないなら、あなたは同じ日付フォーマットを使うことができます、しかし、あなたは、保存時に、日付を分割して、diffの方法でunix datestampにそれを変換しなければならないでしょう。あなたが使用することができます:

$date = "dd/mm/yyyy";
$date = explode("/", $date);
$date = mktime(0, 0, 0, (int)$date[1], (int)$date[0], (int)$date[2]);
4
Brady