0

こんにちは、今日からすべてのイベントを表示しようとしています。これはカスタム フィールドであるため、postmeta テーブルに格納されます。日付を比較しようとすると、あるべきときに結果が返されません。正しい日付形式に一致しています。

    $today = date('d/m/Y',time());
$args = array(
'post_type' => 'live',
'meta_query' => array(
                  array(
               'key' => 'date',
               'value' => $today,
               'compare' => '>=',
               'type' => 'DATE',
 )
)
);   

どんな助けでも、私は感謝します。

ありがとう

4

1 に答える 1

1

日付を比較できるようにするには、Y / m / d形式(またはYmd ...など)を使用する必要があります。

引数を使用すると、SQLクエリは次のようになります。

SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) WHERE 1=1 AND wp_posts.post_type = 'live' AND (wp_posts.post_status = 'publish') AND ( (wp_postmeta.meta_key = 'date' AND CAST(wp_postmeta.meta_value AS DATE) >= '17/04/2012') ) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 10 

これは間違っています、例えば18/03/2012 >= 17/04/2012本当です...

Y / m / d形式を使用し、次の引数を使用する場合:

$args = array(
    'post_type' => 'live',
    'meta_query' => array(
        array(
            'key' => 'date',
            'value' => date('Y/m/d',time()),
            'compare' => '>=',
        )
    )
);

それは期待どおりに機能します:

SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) WHERE 1=1 AND wp_posts.post_type = 'live' AND (wp_posts.post_status = 'publish') AND ( (wp_postmeta.meta_key = 'date' AND CAST(wp_postmeta.meta_value AS CHAR) >= '2012/04/17') ) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 10 

それで :

  • データベースの日付値を変更できます
  • または、比較前にこれらの値を変換する独自のクエリを作成できます
于 2012-04-16T20:03:54.750 に答える