web-dev-qa-db-ja.com

Drupal 8の日付のみのフィールドで日付範囲entityQueryを実行する方法は?

Drupal 8では、日付のみフィールドはvarchar列のデータをCCYY-MM-DDに格納します=フォーマット、例2016-04-18

そのため、単に(> =)、より小さい(<=)、または同様のタイムスタンプベースのentityQueryを実行することはできません。

これに対処する方法に関する簡単な解決策はありますか?具体的には、2つのクエリを実行しようとしています。1つは日付フィールドが14〜21日経過したもので、もう1つは日付フィールドが21日以上経過したものです。

8
Decipher

エンティティクエリでそのような多くの条件を実行していますが、まだ問題は発生していません。

注意する必要がある主なことは、データが格納されるタイムゾーン、つまり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();
16
Berdir