比较自定义字段中的日期

时间:2012-11-22 作者:Oterox

我有一个函数可以返回未来事件日期:

function get_upcoming_exercises( $limit = -1 ) {    
    $args = array(
        \'post_type\' => \'px_event\',
        \'posts_per_page\' => $limit,
        \'post_status\' => \'publish\',
        \'meta_query\' => array(
            array(
                \'key\' => \'_px_event_date\',
                \'value\' => date(\'m-d-y\'),
                \'compare\' => \'>=\',
            ),
        ),
        \'orderby\' => \'key\',
        \'order\' => \'DESC\',
    );

    $query = new WP_Query( $args );       
    return $query;
}
日期以字符串形式存储(m-d-y):

2012年10月25日

01-03-2013

该函数不能正常工作,因为如果我测试日期大于2012年11月22日,它不会显示2013年3月1日。

如果在mysql中执行比较,也会失败:

select * from wp_postmeta
where meta_key = \'_px_event_date\'
and meta_value >= \'11-22-2012\'
我做错了什么?

3 个回复
SO网友:Milo

您的日期格式顺序错误。从严格的数字角度考虑-11222012>1032013

日期应遵循MySQL date format 以降序单位-yyyy mm dd

SO网友:Ryan Doom

这很旧,但只是切换

日期(“m-d-y”)至日期(“y-m-d”)

应该有用。通知CAP Y。

SO网友:Oterox

我最终修改了该函数以使用sql查询:

function get_upcoming_exercises( $limit = -1 ) {
    global $wpdb;

    $exercises_query = "select m.meta_value, p.*  
                        from $wpdb->postmeta m, $wpdb->posts p
                        where m.meta_key = \'_px_exercise_date\'
                        and p.ID = m.post_id
                        and p.post_status = \'publish\'
                        and STR_TO_DATE(meta_value, \'%m-%d-%Y\') >= STR_TO_DATE(\'" . date(\'m-d-y\') . "\', \'%m-%d-%Y\')
                        order by STR_TO_DATE(meta_value, \'%m-%d-%Y\') desc " ;
    if ($limit != -1)
        $exercises_query .= " limit ".$limit;

    $exercises = $wpdb->get_results( $exercises_query );

    return $exercises;
}

结束

相关推荐

为什么wp_UPDATE_POST()不更新POST_STATUS字段?

我正在使用此位从前端插入/更新自定义帖子类型。日期是从自定义jquery日期选择器设置的。 if (strtotime($date) < strtotime(\'tomorrow\')) { $newpostdata[\'post_status\'] = \'publish\'; } elseif (strtotime($date) > strtotime(\'today\')) { $newpostdata