翻译日期格式

时间:2014-04-01 11:35:39

标签: php wordpress date

我有以下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') ) { ?>
...

2 个答案:

答案 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++; }

此代码避免转换计算日期,但会进行显示。