如何格式化unix时间戳数组中的日期列表?

时间:2014-09-18 02:03:30

标签: php arrays wordpress timestamp unix-timestamp

我正在使用的WordPress插件输出一个数组(应该只有两个日期/时间),如下所示:

Array ( [0] => 1412037900 [1] => 1413340200 [2] => )

我不确定为什么会有一个尾随的空节点,但无论如何,我都试图从中获取格式化的日期/时间列表。

我在我的php中有这个(get_post_meta函数返回数组):

<?php global $post;
$date = get_post_meta( $post->ID, '_cmb2_date_time', true );
foreach ( $date as $item ) {
echo '<p>' . date("F j, Y, g:i a", (int)$item) . '</p>';
} ?>

现在我得到了这个:

September 30, 2014, 12:45 am
October 15, 2014, 2:30 am
January 1, 1970, 12:00 am

我想要的是这个:

September 30, 2014, 12:45 am
October 15, 2014, 2:30 am

最终我还想让它成为有条件的,以便它回应&#34; TBA&#34;什么时候没有约会。我可以稍后担心它会工作但是当数组为空时我得到一个错误,上面写着&#34;警告:为foreach()提供的参数无效...&#34;

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:4)

最后一个结果是dateix equivelant为0 unix时间,因为在数组末尾有一个空对象。只需在转换之前删除(弹出)最后一个对象:

<?php global $post;
$date = get_post_meta( $post->ID, '_cmb2_date_time', true );
array_pop($date);
foreach ( $date as $item ) {
echo '<p>' . date("F j, Y, g:i a", (int)$item) . '</p>';
} ?>

然后,要包含TBA功能:

<?php global $post;
$date = get_post_meta( $post->ID, '_cmb2_date_time', true );
//If you are still getting an extra object even when there are no dates to be passed 
//from get_post_meta then pop before the check if empty
array_pop($date);
if( empty( $date ) )
{
     echo '<p>TBA</p>';
}
else
{
    //If you are not getting the extra object when empty, only when there are results
    //then put the pop here before the foreach loop
    foreach ( $date as $item ) {
        echo '<p>' . date("F j, Y, g:i a", (int)$item) . '</p>';
    } 
}
?>

答案 1 :(得分:0)

如果最终参数为空(如果为0则为unix纪元),

date()将输出当前日期和时间,因此请使用此代码;

foreach ( $date as $item ) {
    if($item) echo '<p>' . date("F j, Y, g:i a", (int)$item) . '</p>';
}

如果数组条目为空,则不会回显日期。

希望这有帮助。

答案 2 :(得分:0)

将foreach更改为

foreach ( $date as $item ) {
    echo '<p>'.(empty($item)?"TBA":date("F j, Y, g:i a", (int)$item)).'</p>';
}