如果这些是自定义字段中的字符串,如何排序日期?

时间:2019-01-31 16:19:08

标签: php

我有一系列帖子,日期位于自定义字段中,例如:

02/12/1978 

01/11/1987

这些是实际的字符串,而不是日期。

然后,我运行以下命令,在其中尝试按日期排序,并附加每个日期的帖子ID,以使它们运行已排序的帖子:

    $dateOrdered = [];
    while ( $queryPosts->have_posts() ) : $queryPosts->the_post();
        $id = $post->ID;
        $date = usp_get_meta(false, 'usp-custom-80');
        array_push($postOrdered, $id);
        $dateOrdered[] = array("date"=>$date, "id"=>$id);
    endwhile;
endif;

function custom_sort_dt($b, $a) {
    return strtotime($a['date']) - strtotime($b['date']);
}
usort($dateOrdered, "custom_sort_dt");

$dateOrdered = implode(',', array_column($dateOrdered, 'id'));

但这显示的日期没有排序。

1 个答案:

答案 0 :(得分:0)

假设您有某种类型的“ Post”类,例如

2GB

并将它们保存在名为class Post { public $date; } 的数组中,可以执行以下代码:

$posts

,并具有排序的$ dates数组。这些值是unix时间戳。

修改

日期的格式为dd-mm-yyyy,因此我们需要使用“ d-m-yy”。

我们还需要通过在其前面添加一个\来完全限定DateTime。

$dates =  array_map(function($p) { return DateTime::createFromFormat('d/m/yy', $p->date)->getTimestamp(); }, $posts);
asort($dates);

回显帖子内容,然后使用

$postOrdered[] = [];
while ($queryPosts->have_posts()) {
    $queryPosts->the_post(); 
    $id = get_the_ID(); 
    $postOrdered[$id] = \DateTime::createFromFormat('d-m-yy', usp_get_meta(false,'usp-custom-80'))->getTimestamp();
}

asort($postOrdered);
$ids = array_keys($postOrdered)