Drupal 8では、日付のみフィールドはvarchar列のデータをCCYY-MM-DDに格納します=フォーマット、例2016-04-18。
そのため、単に(> =)、より小さい(<=)、または同様のタイムスタンプベースのentityQueryを実行することはできません。
これに対処する方法に関する簡単な解決策はありますか?具体的には、2つのクエリを実行しようとしています。1つは日付フィールドが14〜21日経過したもので、もう1つは日付フィールドが21日以上経過したものです。
エンティティクエリでそのような多くの条件を実行していますが、まだ問題は発生していません。
注意する必要がある主なことは、データが格納されるタイムゾーン、つまりUTCです。これをストレージのタイムゾーンに変換する必要があります(そのための定数があります)。そうしないと、クエリが数時間ずれます。
ここに私がやっていることに基づいた例があります。日のみを保存する場合、それをフォーマットするための定数もあります。
$date = new DrupalDateTime('21 days ago');
$date->setTimezone(new \DateTimezone(DATETIME_STORAGE_TIMEZONE));
$formatted = $date->format(DATETIME_DATETIME_STORAGE_FORMAT);
$nids = \Drupal::entityQuery('node')
->condition('your_date_field.value', $formatted, '<=')
->range(0, 50)
->execute();