当日期为字符串格式时,从发布元数据中筛选日期

时间:2016-11-07 作者:user2105662

我想使用post meta表中存储的日期过滤帖子。下图显示了元数据的存储方式:

Date meta data

我想筛选开始日期和结束日期之间的记录。以下是我的查询,该查询不起作用:

$start_date = date(\'d-m-Y\',strtotime($date." +15 days"));
$end_date = date(\'d-m-Y\',strtotime($date." -15 days"));
$query_args[\'meta_query\'][] = array(
    \'key\' => \'_start_date\',
    \'value\' => array($end_date, $start_date),
    \'compare\' => \'BETWEEN\',
    \'type\' => \'date\',
);

2 个回复
SO网友:cybmeta

如果要比较MySQL语句中的日期,应该使用MySQL datetime format: YYYY-MM-DD HH:MM:SS(PHP格式Y-m-d H:i:s)

然后,您可以轻松地比较日期\'type\' => \'date\' 在元查询中,参数应按预期工作:

$start_date = date(\'Y-m-d\', strtotime($date." +15 days"));
$end_date = date(\'Y-m-d\',strtotime($date." -15 days"));
$query_args[\'meta_query\'][] = array(
    \'key\' => \'_start_date\',
    \'value\' => array($end_date, $start_date),
    \'compare\' => \'BETWEEN\',
    \'type\' => \'date\',
 );
如果需要以其他格式显示日期和/或时间,只需在显示之前进行转换即可。

例如,您可以使用date_i18n() 根据WordPress语言配置,以所需格式显示本地化日期。例如:

$post_id= 45;
$start_date = get_post_meta( $post_id. \'_start_date\', true );
// Format 15 October 2016 = d F Y
// See http://php.net/manual/en/function.date.php
echo date_i18n( \'d F Y\', strtotime( $start_date ) );
或者,如果要在WordPress配置中设置日期格式:

echo date_i18n( get_option( \'date_format\' ), strtotime( $start_date ) );

SO网友:Benoti

对于meta\\u查询、tax\\u查询,数组是嵌套数组,因为meta\\u查询接受可选关系:

因此,您需要将给定的meta\\u查询更改为:

$query_args[\'meta_query\'] = array(
    //\'relation\' => \'OR\', // Optional, defaults to "AND"
       array(
            \'key\' => \'_start_date\',
            \'value\' => array($end_date, $start_date),
            \'compare\' => \'BETWEEN\',
            \'type\' => \'date\',
       )
);
我已经对关系关闭进行了注释,您不需要在这个查询中使用它。

希望对你有帮助。

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在