我使用CMB2和以下代码选择日期;时间:
$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\',
) );
该代码在管理面板中为我提供了以下信息:
要检索此元数据,我使用以下代码:
$text = get_post_meta( get_the_ID(), \'_cmb2_event_date_prefix_datetime_timestamp\', true )
echo esc_html( $text );
但这给了我一个如下的数字,而不是我在管理面板中选择的日期和时间。
1457368800
为什么会这样?我怎样才能得到我在那个元框中选择的日期和时间。
最合适的回答,由SO网友:Adam 整理而成
CMB2的日期/时间相关字段类型将其所有值作为Unix时间戳存储在数据库中,但text_datetime_timestamp_timezone
它将其值存储为序列化的DateTime对象。
- text_date_timestamp 日期选择器(UNIX时间戳)text_datetime_timestamp 文本日期/时间选择器组合(UNIX时间戳)text_datetime_timestamp_timezone 文本日期/时间选择器/时区组合(序列化日期时间对象)
请参阅:
https://github.com/WebDevStudios/CMB2/wiki/Field-Types您在metabox中看到的是从Unix时间戳到人类可读格式的转换,我相信您可以使用date_format
呼叫时按键$cmb->add_field()
.
在您的情况下,只需通过PHPdate()
函数可根据需要格式化结果。
示例:
$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
请参阅PHP的文档
date()
用于格式化说明的函数:
SO网友:Pieter Goosen
CMB2似乎正在以unix时间戳格式保存日期,这是一件非常好的事情。当您需要根据日期对数据进行排序或搜索时,这使得排序和搜索变得轻而易举。
将unix时间戳转换为任何需要的格式非常容易。从PHP 5.3开始,您可以使用DateTime
class 对于这些类型的转换
$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\');
只要确定输出格式,我们在南非读到
03/07/2016
2016年7月3日,我知道一些国家将其解读为2016年3月7日。如果是后者,则将格式更改为
m/d/Y H:i