将自定义元框日期从YYYY/MM/DD格式化为可读性更强的替代日期

时间:2013-03-13 作者:Mr.Brown

问题

这是之前的一个问题,米洛在这里很客气地回答了这个问题-How to sort CPT by custom meta value (date), and return posts month by month

简而言之,我在一些方面遇到了一些问题,无法正确格式化我的自定义元框日期。。。即,在“我的自定义列”的后端,然后在“我的存档模板”的前端。

例如,在我的存档模板中,我试图通过下面粘贴的代码返回帖子所属的当前日期,但当我访问没有帖子的月份时,我的模板会返回日期;1970年1月“;相反

<?php $calendar_month = get_post_meta($post->ID, \'epr_startdate\', TRUE);?>
<?php $this_month = strtotime($calendar_month); ?>
<span id="current_month"><?php echo date( \'F Y\', $this_month ); ?></span>
                
此外,在后端,我正在尝试使用它,以便;“开始日期”;则只输出该信息,而如果用户同时输入;“开始日期”;和一个“;“结束日期”;然后重新运行这两个日期,但当我使用下面的代码示例时,我的开始日期将以两个形式返回,如下所示:2013年3月3日-2013年3月3日。

case "eventdate":
                $eventstart = get_post_meta($post->ID, \'epr_startdate\', true);
                $eventstart_col = strtotime($eventstart);

                $eventend = get_post_meta($post->ID, \'epr_enddate\', true);
                $eventend_col = strtotime($eventend);

                if ( get_post_meta($post->ID, \'epr_startdate\', true) && ! get_post_meta($post->ID, \'epr_enddate\', true) )
                    echo date( \'M n, Y\', $eventstart_col );
                elseif ( get_post_meta($post->ID, \'epr_enddate\', true) )
                    echo date( \'M n, Y\', $eventstart_col ) . \' &mdash; \' . date( \'M n, Y\', $eventend_col );
                else
                    echo \'NA\';
                break;
提前感谢您抽出时间
最佳

最终解决方案非常感谢s_ha_dum 感谢他的耐心和支持
下面是我的问题的最终工作解决方案。。。

Correctly outputting the date when no posts exist for the currently queried month:

<?php $this_month = strtotime($calendar_month);
if (false === $this_month) {
$this_month = strtotime(get_query_var( \'calendar_year\' ) . get_query_var( \'calendar_month\' ) .\'01\');
} ?>
<span id="current_month"><?php echo date( \'F Y\', $this_month ); ?></span><?php
?>
Custom columns:

case "eventdate":
                $start_date = get_post_meta($post->ID, \'epr_startdate\', true);
                $start_date_col = strtotime($start_date);           
                $end_date = get_post_meta($post->ID, \'epr_enddate\', true);
                $end_date_col = strtotime($end_date);
                
                if ( $start_date_col && !$end_date_col ) 
                    echo date( \'M d, Y\', $start_date_col );
                elseif ( $start_date_col && $end_date_col )
                    echo date( \'M d, Y\', $start_date_col ) . \' &mdash; \' . date( \'M d, Y\', $end_date_col );  
                else
                    echo \'NA\';
                break;

Redirecting /calendar -> /calendar/yyyy/mm:

function redirect_empty_archive() {
$m = get_query_var(\'calendar_month\');
$y = get_query_var(\'calendar_year\');
    if (
        is_post_type_archive(\'calendar\') &&
        ( empty($m) || empty($y) )
    ) {
        wp_safe_redirect( \'/calendar\' . date(\'/Y/m\') );
    }
}
add_action(\'template_redirect\',\'redirect_empty_archive\');

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

但是,当我访问一个月没有帖子时,我的模板会返回日期“1970年1月”。

对这将发生。UNIXTIME开始于1970年1月1日。这是“0000/00/00”,但负数可以追溯到1901年的某个时候。strtotime 将返回false 任何超出范围的事情,包括你不存在的日期。date 如果给出了一个错误的日期,将假定为“零日”,因此,如果日期不存在或有其他缺陷,将得到1970年1月1日。如果我没记错的话,64位机器可以处理更大的范围。不管怎样,一个不存在的日期会给你1970年。尝试:

$calendar_month = "1901/01/01";
$this_month = strtotime($calendar_month);
var_dump($this_month);
echo \'<br />\';
echo date(\'Y\',$this_month);
echo \'<br />\';
在显示之前,您要确保您有一个好的日期。

<?php $this_month = strtotime($calendar_month); 
if (false !== $this_month) { ?>
  <span id="current_month"><?php echo date( \'F Y\', $this_month ); ?></span><?php
}
您的另一个代码有点庞大,但看起来应该可以工作,只是日期格式错误。我怀疑您并没有得到想要的“月-日,年”,而是“月-名-月-号,年”,如果两个日期在同一个月/年内,则看起来像是重复的。请仔细查看date formatting operators.

$eventstart = get_post_meta($post->ID, \'epr_startdate\', true);
$eventstart_col = strtotime($eventstart);

$eventend = get_post_meta($post->ID, \'epr_enddate\', true);
$eventend_col = strtotime($eventend);

if ( $eventstart_col && !$eventend_col ) {
    // only the start date
    echo date( \'M d, Y\', $eventstart_col );
} elseif ( $eventstart_col && $eventend_col ) {
    // both start and end date
    echo date( \'M d, Y\', $eventstart_col ) . \' &mdash; \' . date( \'M d, Y\', $eventend_col );  
} else {
    echo \'NA\';
}
我想我已经把它们正确地组合在一起了。

结束

相关推荐

CSS样式在自定义Metabox中不起作用

我在设计自定义帖子的元框内容时遇到了一些困难。未应用CSS样式。根据我在另一篇帖子上读到的内容,我做了一个非常简单的测试。metabox创建:add_meta_box(\'wpptabs_company_details\', __(\'The Meta box name\', \'wpptabs\'), array(&$this, \'render_meta_content\'), \'wpptabs\', \'normal\', \'high\'); Meteabox含量:<la