web-dev-qa-db-fra.com

datetime_timestamp affiche uniquement des chiffres? besoin en date et heure

J'utilise CMB2 et le code suivant pour sélectionner la date et l'heure:

$cmb->add_field( array(
        'name' => __( 'Test Date/Time Picker Combo (UNIX timestamp)', 'cmb2' ),
        'desc' => __( 'field description (optional)', 'cmb2' ),
        'id'   => $prefix . 'datetime_timestamp',
        'type' => 'text_datetime_timestamp',
    ) );

Ce code me donne ceci dans le panneau d'administration:

 date and time admin 

Pour récupérer ces métadonnées, j'utilise le code suivant:

$text = get_post_meta( get_the_ID(), '_cmb2_event_date_prefix_datetime_timestamp', true )
echo esc_html( $text );

Mais cela me donne un numéro comme suit et non la date et l'heure que j'ai sélectionnées dans le panneau d'administration.

1457368800

Pourquoi est-ce ? Comment puis-je obtenir la date et l'heure que j'ai sélectionnées dans cette méta-boîte.

2
Foolish Coder

Les types de champs associés à la date/heure pour CMB2 stockent toutes leurs valeurs en tant qu'horodatages Unix dans la base de données, à l'exception de text_datetime_timestamp_timezone qui stocke sa valeur sous la forme d'un objet DateTime sérialisé.

  • text_date_timestamp Date Picker (horodatage UNIX)
  • text_datetime_timestamp Combo sélecteur de date/heure de texte (horodatage UNIX)
  • text_datetime_timestamp_timezone Texte Sélecteur de date/heure/fuseau horaire (objet DateTime sérialisé)

Voir: https://github.com/WebDevStudios/CMB2/wiki/Field-Types

Ce que vous voyez dans la metabox est une conversion du timestamp Unix vers un format lisible par l’homme que vous pouvez ajuster à votre guise à l’aide de la touche date_format lorsque vous appelez $cmb->add_field().

Dans votre cas, tout ce que vous avez à faire est de transmettre votre horodatage à la fonction date() de PHP pour formater le résultat à votre guise.

Exemple:

$text = get_post_meta( get_the_ID(), '_cmb2_event_date_prefix_datetime_timestamp', true )
echo date('Y-m-d H:i:s A', $text ); // results in 2016-03-07 08:40:00 AM

Voir la documentation sur la fonction date() de PHP pour les instructions de formatage:

6
userabuser

Tu y es presque. Le numéro que vous voyez est un appelé Unix Timestamp .

Vous pouvez facilement le convertir en utilisant date_i18n comme ceci:

<?php echo date_i18n(get_option( 'date_format' ), $text); ?>
6
kraftner

Il semblerait que CMB2 sabving les dates au format timestamp unix, ce qui, à mon humble avis, est une très bonne chose. Cela facilite le tri et la recherche lorsque vous devez trier ou rechercher des données en fonction de dates.

Il est vraiment facile de convertir les timestamps Unix dans n’importe quel format nécessaire. A partir de PHP 5.3, vous pouvez utiliser la classe DateTime pour ce type de conversion

$text = get_post_meta( get_the_ID(), '_cmb2_event_date_prefix_datetime_timestamp', true );
$date = DateTime::createFromFormat( 'U', $text );
echo $date->format( 'd/m/Y H:i');

Assurez-vous simplement du format de sortie. En Afrique du Sud, 03/07/2016 correspond au 3 juillet 2016 , je sais que certains pays le lisent au 7 mars 2016 . Si c'est le dernier cas, changez votre format en m/d/Y H:i

4
Pieter Goosen