web-dev-qa-db-fra.com

Type de champ Date vs Horodatage

Mon nouveau projet implique l'exigence de définir manuellement une heure de création de nœuds car ils cherchent à migrer manuellement des parties de leur ancien site Web vers leur nouveau. La date sera principalement utilisée pour trier les nœuds, seuls 2 des 6 types de contenu auront la date imprimée dans le frontend.

Dans D8, vous pouvez choisir entre un champ de date et d'horodatage. Les deux options de sortie semblent être les mêmes. La seule différence que j'ai remarquée est la sortie HTML.

La sortie d'horodatage ressemble à ceci

<div class="field__item">Mon, 03/18/2019 - 18:00</div>

La sortie de la date ressemble à ça

<time datetime="2019-03-18T18:00:17Z" class="datetime">Mon, 03/18/2019 - 18:00</time>

J'ai trouvé une page de documentation pour D7 sur le sujet: https://www.drupal.org/node/1455576 mais j'ai l'impression que ces informations ne s'appliquent pas à ces deux types de champs dans D8 .

Lequel devrais-je choisir à cet effet? Et quelle est la différence en D8 entre ces deux types de champs?

3
nihilistenhymne

Dans Drupal 8, les horodatages (et créés et mis à jour) sont stockés sous forme d'entiers dans la base de données. Ils n'utilisent pas le type de données natif. Les horodatages peuvent être ajoutés via l'interface utilisateur, mais ils ne peuvent être créés et mis à jour que être utilisé comme champs de base.

Les champs Datetime et daterange sont stockés sous forme de chaînes ISO: date uniquement en tant que Y-m-d et date + heure en tant que format ISO8601 complet (actuellement sans décalage UTC). Ceux-ci sont stockés sous forme de chaînes simples, et non comme un type natif, car la gestion de la date/heure dans les backends de base de données par défaut n'est pas portable.

La raison pour laquelle vous voyez un code HTML différent est que les deux types de champs utilisent des formats différents. Votre horodatage utilise TimestampFormatter et il semble que votre datetime utilise DatetimeDefaultFormatter. Il est possible d'obtenir la sortie des deux champs de la même manière si vous utilisez le DatetimePlainFormatterformatter. Vous pouvez également écrire votre propre formateur pour les horodatages pour la sortie de l'heure HTML5. Pour diverses raisons, les formateurs entre les deux types sont différents.

5
mpdonadio

Du point de vue Drupal, l'horodatage a des problèmes avec les filtres de vues.

Dans un récent projet D7, j'ai utilisé l'horodatage juste pour garder les choses cohérentes puisque je faisais des requêtes de champ de date de module personnalisé.

En D7, j'ai remarqué que les filtres d'affichage ne fonctionnent que si vous entrez un horodatage plutôt qu'une date, c'est idiot! Ce qui me fait penser que la plupart des gens utilisent la date, car il n'y avait pas de problème de filtre. J'ai contourné ce problème en utilisant les vues de requête et en convertissant la chaîne de date en horodatage.

D8 pourrait également avoir ce problème. Donc, la route la plus sûre et la plus fréquentée est peut-être d'utiliser la date.

2
No Sssweat