it-swarm.com.de

benutzerdefiniertes Feld Wert Datum in Unix-Zeitstempel konvertieren Probleme

Aus irgendeinem Grund habe ich Schwierigkeiten, einen in einem Metafeld gespeicherten Datumswert in einen Unix-Zeitstempel (und wieder zurück) zu konvertieren. Wenn ich das Datum als Zeichenfolge speichere, funktioniert alles einwandfrei. Wenn ich es jedoch mit strtotime in einen Zeitstempel umwandle, wird der Wert nicht gespeichert.

Mein Arbeitscode sieht so aus:

<?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);
}
?>

Aber wenn ich es wie folgt ändere, funktioniert es nicht:

<?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);
}
?>

Kratz meinen Kopf hier! Prost

2
Richard Sweeney

Mit Blick auf http://www.php.net/manual/en/datetime.formats.date.php denke ich nicht, dass strtotime eine DD konvertieren wird/MM/JJJJ zur richtigen Zeit.

Es kann jedoch MM/TT/JJJJ oder JJJJ/MM/TT ausgeführt werden.

Verwenden Sie das Datumsformat JJJJ/MM/TT

Wenn das nicht Ihren Wünschen entspricht, können Sie dasselbe Datumsformat verwenden, aber Sie müssen beim Speichern das Datum aufteilen und es auf andere Weise in einen Unix-Datenstempel konvertieren. Du könntest benutzen:

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