Drupalに前処理したい日付フィールドがあります。残念ながら
_$node->field_date_time->value;
_
1時間(値が9:00であると予想される場合は8:00)の値を与えます。 Drupalは日付を保存する方法と後で表示する方法(タイムゾーンを考慮に入れて)に問題があると思います。デフォルトのタイムゾーンをDateTimeオブジェクトに渡してみましたが、また、\Drupal::service('date.formatter')
を使用して日付をフォーマットしようとしましたが、結果はまだオフです。
デバッグするとき、私はそれを使用してそれを見つけました:
_$node->field_date_time->date
_
保護されたDateTimeObject
プロパティの下で予定日を確認できます(スクリーンショットを参照)。
誰かがそれを抽出する方法を知っていますか、それとも私が見逃しているものがあるのでしょうか?実行中Drupal 8.1.9
日付フィールドを表示する場合、Drupalは通常、現在ログインしているユーザーのタイムゾーンに変換します。ログインしているユーザーがいない場合は、サイトのデフォルトのタイムゾーンが使用されます。別のタイムゾーンが設定されているユーザーですか?
また、時刻は内部でUTCとして保存されているため、日付の値を印刷したり、デバッガーを使用したりすると、1時間ずれた時刻が表示されます。ユーザーのタイムゾーンで時刻を出力したい場合は、次のようにしてください:
\Drupal::service('date.formatter')->format($date->getTimestamp());
これは、ユーザーのタイムゾーンを使用するか、サイトのデフォルトのタイムゾーンにフォールバックします。
$value = $node->field_date_time->value;
で取得される値は、UTCに格納されている日時値です。
この文字列をDateTimeオブジェクトに変換した場合
$ date =新しいDrupalDateTime($ value)
次に、サイト(ヨーロッパ/ダブリン)にデフォルトのタイムゾーンが設定されたDatetimeオブジェクトを取得します。正しいdatetimeオブジェクトを確実に保持するには、UTC TimeZoneを使用してDateTimeオブジェクトを作成する必要があります
$ date = new DrupalDateTime($ value、new DateTimeZone( 'UTC'));
そして、datetimeをDefault TimeZoneサイトに変換するdate.formatterサービスによって、日付オブジェクトを正しくフォーマットできます。