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:
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.
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é.
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:
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); ?>
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