私の新しいプロジェクトでは、古いWebサイトの一部を新しいWebサイトに手動で移行することを検討しているため、ノードの作成時刻を手動で設定する必要があります。日付は主にノードのソートに使用され、6つのコンテンツタイプのうち2つだけがフロントエンドに日付を出力します。
D8では、日付フィールドとタイムスタンプフィールドのどちらかを選択できます。両方の出力オプションは同じようです。私が気付いた唯一の違いは、HTML出力です。
タイムスタンプ出力は次のようになります
<div class="field__item">Mon, 03/18/2019 - 18:00</div>
日付出力はそのようになります
<time datetime="2019-03-18T18:00:17Z" class="datetime">Mon, 03/18/2019 - 18:00</time>
この問題についてD7のドキュメントページを見つけました: https://www.drupal.org/node/1455576 しかし、この情報はD8のこれら2つのフィールドタイプには当てはまらないと感じています。
この目的のためにどちらを選択すればよいですか?また、これら2つのフィールドタイプのD8の違いは何ですか?
Drupal 8では、タイムスタンプ(および作成および更新)はデータベースに整数として保存されます。これらはネイティブデータタイプを使用しません。タイムスタンプはUIを介して追加できますが、作成および更新ができるのはベースフィールドとして使用できます。
日時フィールドと日付範囲フィールドはISO文字列として保存されます。日付のみがY-m-dで、日付と時刻が完全なISO8601形式(現在はUTCオフセットなし)です。デフォルトのデータベースバックエンドでの日付/時刻処理は移植性がないため、これらはネイティブタイプではなくプレーンな文字列として保存されます。
異なるHTMLが表示されるのは、2つのフィールドタイプが異なるフォーマッタを使用しているためです。タイムスタンプはTimestampFormatter
を使用しており、日時はDatetimeDefaultFormatter
を使用しているようです。 DatetimePlainFormatter
formatterを使用すると、両方のフィールドを同じように出力することができます。 HTML5時間を出力するタイムスタンプ用の独自のフォーマッターを作成することもできます。さまざまな理由により、2つのタイプのフォーマッタは異なります。
Drupalの観点から見ると、タイムスタンプにはビューフィルターに関する問題があります。
最近のD7プロジェクトでは、カスタムモジュールの日付フィールドクエリを実行していたため、一貫性を保つためにタイムスタンプを使用しました。
D7では、日付ではなくタイムスタンプを入力した場合にのみビューフィルターが機能することに気付きました。これはばかげています!このフィルターの問題はなかったので、ほとんどの人が日付を使用していると思います。ビューのクエリ変更を利用し、日付文字列をタイムスタンプに変換することで、この問題を回避しました。
D8にもこの問題がある可能性があります。したがって、おそらく最も安全な、最も移動された道路は日付を使用することです。