自定义字段值日期转换为Unix时间戳问题

时间:2011-04-12 作者:Richard Sweeney

出于某种原因,我很难将存储在元字段中的日期值转换为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);
}
?>
在这里抓我的头!干杯

1 个回复
最合适的回答,由SO网友:Scott 整理而成

正在查看http://www.php.net/manual/en/datetime.formats.date.php 我认为strotime无法正确地将DD/MM/YYYY转换为时间。

但是,它可以执行MM/DD/YYYY或YYYY/MM/DD。

尝试使用YYYY/MM/DD的日期格式

或者,如果您不喜欢,则可以使用相同的日期格式,但必须在保存时拆分日期并以不同的方式将其转换为unix日期戳。您可以使用:

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

结束

相关推荐