有一个案例,我试图比较和使用两个变量,但首先需要从日期戳创建和格式化。
目前,如果我使用:
ob_start();
echo date_i18n('d M Y', $date_start);
$start = ob_get_contents();
ob_end_clean();
我可以实现我想要的。但是,当我尝试添加第二个变量时,$date_end
(和一个条件)我得到了奇怪的行为。所以我的想法是在同一个函数中使用它两次不是犹太教。这是我试过的:
if( $date_start == $date_end ) {
ob_start();
echo date_i18n('d M Y', $date_start);
$start = ob_get_contents();
ob_end_clean();
$title = $start;
} else {
ob_start();
echo date_i18n('d M', $date_start);
$start = ob_get_contents();
ob_end_clean();
ob_start();
echo date_i18n('d M Y', $date_end);
$end = ob_get_contents();
ob_end_clean();
$title = $start.' - '. $end;
}
基本上,如果$date_end
不等于$date_start
,则$start
将正确输出,但$end
将输出为今天的日期。如果$date_end
等于$date_start
,那么日期将显示为今天的日期。
实际上只使用一个日期就足够了我的项目,但我对替代方案很好奇,为什么我会这样做。
/ 修改 /
输入值为:
$date_start = strtotime(get_field('date_debut', $post_id));
$date_end = strtotime(get_field('date_fin', $post_id));
答案 0 :(得分:0)
输出缓冲区有几种用法。其中之一是能够捕获将内容打印到标准输出(而不是返回)的函数和方法的输出。换句话说,这样的函数:
function foo(){
echo 'bar!';
}
......而不是这个:
function foo(){
return 'bar!';
}
我们不知道date_i18n()
如何运作,但您回显其输出:
echo date_i18n('d M Y', $date_start);
所以我强烈怀疑你过度设计了一段可能只是的代码:
$start = date_i18n('d M Y', $date_start);
除此之外,PHP具有处理日期的特定类型(Unix时间戳和DateTime对象)。您不应该使用字符串来执行日期操作逻辑,就像您不会尝试添加one
和three
一样。
答案 1 :(得分:0)
这个怎么样:
$ts_start = strtotime( get_field( 'date_debut', $post_id ) );
$ts_end = strtotime( get_field( 'date_fin', $post_id ) );
if ( $ts_start === $ts_end ) {
$title = date_i18n( 'd M Y', $ts_start );
} else {
$title = date_i18n( 'd M', $ts_start ) . ' - ' . date_i18n( 'd M Y', $ts_end );
}