Modifier le format de date de l'article


21

Je voudrais changer le format de date utilisé pour les articles dans Drupal 8. Il semble qu'il utilise le Default medium dateformat par défaut. J'ai ajouté mon propre format à admin/config/regional/date-time, mais je ne trouve pas où modifier le format utilisé par les articles.

Existe-t-il un moyen de le faire à partir du CMS ou cela doit-il être fait dans le code?

Réponses:


41

Donc, après avoir passé plus de temps que je ne veux l'admettre, j'ai trouvé deux solutions.

Solution 1

Une façon de le faire est avec la fonction de date mentionnée par darol100 dans sa réponse. En modifiant son exemple pour mon cas, dans mon node--article.html.twigdossier, j'ai changé:

{% trans %}Submitted by {{ author_name }} on {{ date }}{% endtrans %}

à

{% set createdDate = node.getCreatedTime|date('j F Y') %}
{% trans %}Submitted by {{ author_name }} on {{ createdDate }} {% endtrans %}

L'avantage de cette approche est qu'elle est simple et rapide. L'inconvénient est que je n'utilise pas le système de format de date intégré de Drupal.

Solution 2

Afin d'utiliser le système de format de date de Drupal, j'ai d'abord créé mon format personnalisé sur admin/config/regional/date-time. Ensuite, j'ai édité node--article.html.twigcomme suit:

{% set createdDate = node.getCreatedTime|format_date('my_custom_format') %}
{% trans %}Submitted by {{ author_name }} on {{ createdDate }} {% endtrans %}

Cela suppose que j'ai nommé mon format personnalisé " Mon format personnalisé ", ce qui donne le nom de la machine my_custom_format.

Bien que cette solution nécessite une étape supplémentaire, je pense que c'est la façon la plus Drupal de le faire.

Je l'ai appris sur cette page sur les filtres Twig de Drupal .


9

Si vous souhaitez modifier la base du format de date au niveau du type de contenu d'article. Vous pouvez modifier / ajouter le code suivant post.published_at|dateet utiliser un filtre pour modifier le format de date.

nœud - article.html.twig

{# Here are few example #}
{{ post.published_at|date(format='j  F  Y') }} {# Output = 10 March 2001#}
{{ post.published_at|date(format="F j, Y, g:i a") }} {# Output = March 10, 2001, 5:16 pm#}
{{ post.published_at|date(format='m/d/Y') }} {# Output 10/3/2001 #}

Twig utilise le même code de dénomination que le format de date php . Pour plus d'informations sur les formats de date de brindille, visitez - http://twig.sensiolabs.org/doc/filters/date.html


1
Bravo! darol100, Cela peut-il être fait dans les fichiers TPL de la même manière pour quelqu'un avec le site Drupal 7?
JohnDoea

1
Oui, mais utilise un modèle PHP au lieu de la syntaxe de brindille. Cela devrait aussi ressembler à quelque chose <?php print format_date($node->created, 'custom', 'm/d/y'); ?>.
itsdarrylnorris

Merci darol100, cela m'a été très utile pour en savoir plus sur les filtres Twig. En fin de compte, cependant, j'ai utilisé le filtre format_date fourni par Drupal (comme je le montre dans ma réponse).
Chris

8

Je suis plus pour la solution 2 de Chris. Comme il dit, c'est plutôt la façon drupale ... mais ce n'est pas encore la meilleure option.

format_date () a été déprécié et sera supprimé avant Drupal 9 ... ce qui signifie qu'un jour, vous ferez une mise à jour drupal et cela se cassera.

Au lieu de cela, il est préférable de le faire dans votre fichier .theme dans une fonction de prétraitement.

function [theme_name]_preprocess_node(&$variables) {
  $variables['date'] = \Drupal::service('date.formatter')->format($variables['node']->getCreatedTime(), 'my_custom_format');
}

2

Une observation sur ce que Duke a dit:

format_date () est obsolète et sera supprimé avant Drupal 9 ...

Oui, la fonction Drupal format_date () définie dans core / includes / common.inc est, en fait, obsolète. Mais, lorsque vous utilisez le filtre twig format_date (), vous n'appelez PAS cette fonction Drupal, au lieu de cela, vous utilisez le filtre twig défini par Drupal dans TwigExtension :: getFilters () , et ce filtre appelle DateFormatter :: format () .

Par conséquent, l'utilisation du filtre twig format_date () est sûre et la solution 2 de Chris est très bien.


2

Il est également possible d'afficher le format de date déjà utilisé et de simplement le modifier dans l'interface utilisateur. Comparez simplement ce que vous voyez sur la page avec les formats de dateadmin/config/regional/date-time/

Si vous modifiez par exemple "Date moyenne par défaut", les dates seront modifiées en utilisant ce format sans toucher à aucun fichier de modèle / brindille.

Les formats de date peuvent également être définis / traduits par langue pour une configuration multilingue.


C'est la meilleure réponse!
sudoman

1

Vous pouvez créer votre propre champ Soumis par en utilisant Display Suite pour créer un champ de jeton.

Dans Drupal 8 / structure / ds / champs

Ajoutez ensuite un champ en utilisant du HTML et des jetons comme ...

By [node:author] on [node:created:custom:F j, Y]

1

Vous pouvez personnaliser le format dans node.html.twig comme ceci:

{{ node.createdtime|date(format="Y-m-d") }}

0

Vous pouvez avoir tous les formats PHP pour la date et l'heure

// Assuming today is March 10th, 2001, 5:16:18 pm, and that we are in the
// Mountain Standard Time (MST) Time Zone

date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
date("m.d.y");                         // 03.10.01
date("j, n, Y");                       // 10, 3, 2001
date("Ymd");                           // 20010310
date('h-i-s, j-m-y, it is w Day');     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
date('\i\t \i\s \t\h\e jS \d\a\y.');   // it is the 10th day.
$today = date("D M j G:i:s T Y");               // Sat Mar 10 17:16:18 MST 2001
date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:18 m is month
date("H:i:s");                         // 17:16:18
date("Y-m-d H:i:s");                   // 2001-03-10 17:16:18 (the MySQL DATETIME format)


{% set createdDate = node.getCreatedTime|date('F j, Y, g:i a') %}
<div class="newsSingleAuthorDate">
      {% trans %}Submitted by <span>{{ author_name }}</span>  on {{ createdDate }} {% endtrans %}
</div>

0

Pour être sûr de ne modifier que les caractères de la date mais pas les éléments HTML environnants, j'utilise le crochet suivant:

function [theme_name]_preprocess_field(array &$variables) {
  if ($variables['field_name'] === 'created') {
    $timestamp = $variables['element']['#items']->value;
    $markup = \Drupal::service('date.formatter')->format($timestamp, 'html_date');
    $variables['items'][0]['content']['#markup'] = $markup;
  }
}

Remplacez-le [theme_name]par le nom de votre thème et html_datepar le format d'heure souhaité, l'un de ceux que vous trouvez sous /admin/config/regional/date-time.


-1

J'ai utilisé le code suivant pour node - article - full.html.twig:

<li class="post-date">
    {% set day = node.createdtime|date("d") %}
      <span class="day">{{ day }}</span>
    {% set month = node.createdtime|date("M") %}
        <span class="month">{{ month }}</span>
 </li>


{% set date = node.createdtime|date("M d, Y") %}
   <span>{{ date }}</span>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.