web-dev-qa-db-fra.com

Comparer les dates dans un champ personnalisé

J'ai une fonction qui devrait renvoyer la date de l'événement futur:

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;
}

les dates sont stockées comme des chaînes (m-d-y):

10-25-2012

01-03-2013

La fonction ne fonctionne pas bien, car si je teste, par exemple, avec des dates supérieures à 11-22-2012, il n'affiche pas le 01-03-2013.

Si j'exécute la comparaison dans mysql, cela échoue aussi:

select * from wp_postmeta
where meta_key = '_px_event_date'
and meta_value >= '11-22-2012'

Qu'est-ce que je fais mal?

1
Oterox

C'est vieux, mais simplement changer

date ('m-d-y') à date ('Y-m-d')

Devrait marcher. Avis CAP Y.

1
Ryan Doom

Votre format de date est dans le mauvais ordre. Pensez-y d'un point de vue strictement numérique - 11222012> 1032013

Les dates doivent suivre le format de date MySQL en unités décroissantes - aaaa-mm-jj

1
Milo

J'ai finalement modifié la fonction pour utiliser une requête 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;
}
0
Oterox