我有以下PHP循环遍历我的wordpress帖子:
<?php
$items = 0;
$thiscat = get_category(2);
$cat_slug = $thiscat->slug;
$args = array(
'post_type' => 'Course',
'category_name' => $cat_slug,
'order' => 'ASC',
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() AND $items < 3) {
$loop->the_post();
$category_course = get_the_category(2);
$cat_slug_course = $category_course[0]->slug;
$date_start = get_post_meta(get_the_ID(), 'date_start', true);
$place = get_post_meta(get_the_ID(), "place", true);
$date_start = date("D, M d, Y", $date_start);
if( strtotime($date_start) >= strtotime('today') ) { ?>
<li>
<a href="<?php the_permalink(); ?>" class="date_fp"><?php echo $date_start; ?> - <?php echo $place; ?></a>
</li>
<?php $items++; }
}
if($items==0) { ?>
<li>
Ingen kommende kurser
</li>
<?php } ?>
它循环并显示最多三个课程的开始日期。但是,我希望$date_start
以丹麦语输出,而不是英语。
我尝试用strftime替换日期并尝试将locale设置为丹麦语,但在某种程度上,将日期格式更改为strftime(%a,%d%b,%Y)时,我的循环只输出Ingen kommende kurser
(没有未来的课程)。这很奇怪,因为在使用日期(并获得英语输出)时,会显示一个课程日期。
$ date_start以毫秒为单位输出时间(例如1371081600137535
)
我尝试过的解决方案,但没有成功:
...
$place = get_post_meta(get_the_ID(), "place", true);
setlocale(LC_ALL, 'nl_NL');
$date_start = strftime("%a, %d %b, %Y", mktime($date_start));
if( strtotime($date_start) >= strtotime('today') ) { ?>
...
答案 0 :(得分:2)
您进行双日期转换:1)文本的时间戳; 2)文本到时间戳。而您不需要任何转换。您可以在get_post_meta
语句中使用if
获得的时间戳。
此外setlocale
仅影响格式,而不影响时区。如果您想申请丹麦语时区,则必须致电date_default_timezone_set
。
试试这个:
...
$date_start = get_post_meta(get_the_ID(), 'date_start', true);
$place = get_post_meta(get_the_ID(), "place", true);
date_default_timezone_set('Europe/Copenhagen');
if( $date_start >= strtotime('today') ) {
...
echo date("D, M d, Y", $date_start);
...
}
...
答案 1 :(得分:0)
由于时区差异,日期值可能会被错误翻译。
尝试类似
的内容// $date_start is already a timestamp so do not do conversion
// $date_start = date("D, M d, Y", $date_start);
if( $date_start >= strtotime('today') ) { ?>
<li>
<a href="<?php the_permalink(); ?>" class="date_fp"><?php echo date("D, M d, Y", $date_start); ?> - <?php echo $place; ?></a>
</li>
<?php $items++; }
此代码避免转换计算日期,但会进行显示。