web-dev-qa-db-ja.com

日付とタイムスタンプのフィールドタイプ

私の新しいプロジェクトでは、古い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の違いは何ですか?

3
nihilistenhymne

Drupal 8では、タイムスタンプ(および作成および更新)はデータベースに整数として保存されます。これらはネイティブデータタイプを使用しません。タイムスタンプはUIを介して追加できますが、作成および更新ができるのはベースフィールドとして使用できます。

日時フィールドと日付範囲フィールドはISO文字列として保存されます。日付のみがY-m-dで、日付と時刻が完全なISO8601形式(現在はUTCオフセットなし)です。デフォルトのデータベースバックエンドでの日付/時刻処理は移植性がないため、これらはネイティブタイプではなくプレーンな文字列として保存されます。

異なるHTMLが表示されるのは、2つのフィールドタイプが異なるフォーマッタを使用しているためです。タイムスタンプはTimestampFormatterを使用しており、日時はDatetimeDefaultFormatterを使用しているようです。 DatetimePlainFormatterformatterを使用すると、両方のフィールドを同じように出力することができます。 HTML5時間を出力するタイムスタンプ用の独自のフォーマッターを作成することもできます。さまざまな理由により、2つのタイプのフォーマッタは異なります。

5
mpdonadio

Drupalの観点から見ると、タイムスタンプにはビューフィルターに関する問題があります。

最近のD7プロジェクトでは、カスタムモジュールの日付フィールドクエリを実行していたため、一貫性を保つためにタイムスタンプを使用しました。

D7では、日付ではなくタイムスタンプを入力した場合にのみビューフィルターが機能することに気付きました。これはばかげています!このフィルターの問題はなかったので、ほとんどの人が日付を使用していると思います。ビューのクエリ変更を利用し、日付文字列をタイムスタンプに変換することで、この問題を回避しました。

D8にもこの問題がある可能性があります。したがって、おそらく最も安全な、最も移動された道路は日付を使用することです。

2
No Sssweat