Ändern Sie das Artikeldatumformat

21

Ich möchte das Datumsformat ändern, das für Artikel in Drupal 8 verwendet wird. Es sieht so aus, als würde das Default medium dateFormat standardmäßig verwendet. Ich habe mein eigenes Format unter hinzugefügt admin/config/regional/date-time, kann jedoch nicht feststellen, wo das von den Artikeln verwendete Format bearbeitet werden kann.

Gibt es eine Möglichkeit, dies vom CMS aus zu tun, oder muss dies im Code erfolgen?

Chris
quelle

Antworten:

41

Nachdem ich mehr Zeit aufgewendet habe, als ich zugeben möchte, habe ich zwei Lösungen dafür gefunden.

Lösung 1

Eine Möglichkeit ist die in seiner Antwort erwähnte Datumsfunktion von darol100. Als ich sein Beispiel für meinen Fall in meiner node--article.html.twigDatei änderte, änderte ich:

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

zu

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

Der Vorteil dieses Ansatzes ist, dass es einfach und schnell ist. Der Nachteil ist, dass ich nicht das in Drupal integrierte Datumsformatsystem verwende.

Lösung 2

Um das Datumsformatsystem von Drupal zu verwenden, habe ich zuerst mein benutzerdefiniertes Format unter erstellt admin/config/regional/date-time. Dann habe ich node--article.html.twigwie folgt bearbeitet :

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

Dies setzt voraus, dass ich mein benutzerdefiniertes Format " My Custom Format " ( Mein benutzerdefiniertes Format ) genannt habe, woraus der Computername resultiert my_custom_format.

Obwohl diese Lösung einen zusätzlichen Schritt erfordert, ist sie meiner Meinung nach eher Drupal-tauglich.

Ich habe auf dieser Seite über Drupals Zweigfilter davon erfahren .

Chris
quelle
9

Wenn Sie das Datumsformat basierend auf der Ebene des Artikelinhaltstyps ändern möchten. Sie können den folgenden Code bearbeiten / hinzufügen post.published_at|dateund mithilfe eines Filters das Datumsformat ändern.

node - 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 verwendet den gleichen Namenscode wie das PHP-Datumsformat . Weitere Informationen zu Zweig-Datumsformaten finden Sie unter http://twig.sensiolabs.org/doc/filters/date.html

itsdarrylnorris
quelle
1
Gedrückt! darol100, Kann dies in TPL-Dateien auf dieselbe Weise für jemanden mit Drupal 7-Site durchgeführt werden?
JohnDoea
1
Ja, aber es wird eine PHP-Vorlage anstelle der Twigsyntax verwendet. Es sollte auch so etwas aussehen <?php print format_date($node->created, 'custom', 'm/d/y'); ?>.
itsdarrylnorris
Vielen Dank, darol100. Dies war sehr hilfreich, um mich mit Twig-Filtern vertraut zu machen. Letztendlich habe ich jedoch den Drupal-Filter format_date verwendet (wie in meiner Antwort gezeigt).
Chris
8

Ich bin mehr für Chris 'Lösung 2. Wie er sagt, ist es eher drupal ... aber es ist noch nicht die beste Option.

format_date () ist veraltet und wird vor Drupal 9 entfernt ... was bedeutet, dass Sie eines Tages ein Drupal-Update durchführen werden, das nicht mehr funktioniert.

Stattdessen ist es besser, dies in Ihrer .theme-Datei in einer Vorverarbeitungsfunktion zu tun.

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

Eine Bemerkung über das, was Duke gesagt hat:

format_date () ist veraltet und wird vor Drupal 9 entfernt ...

Ja, die in core / includes / common.inc definierte Drupal-Funktion format_date () ist in der Tat veraltet. Wenn Sie jedoch den Zweigfilter format_date () verwenden , rufen Sie diese Drupal-Funktion NICHT auf, stattdessen verwenden Sie den von Drupal in TwigExtension :: getFilters () definierten Zweigfilter , und dieser Filter ruft DateFormatter :: format () auf .

Daher ist die Verwendung des Zweigfilters format_date () sicher und Chris 'Lösung 2 ist in Ordnung.

camilo.escobar
quelle
2

Es ist auch möglich, das bereits verwendete Datumsformat zu definieren und dies einfach in der Benutzeroberfläche zu ändern. Vergleichen Sie einfach das, was Sie auf der Seite sehen, mit den Datumsformaten inadmin/config/regional/date-time/

Wenn Sie z. B. "Standard mittleres Datum" ändern, werden die Daten in diesem Format geändert, ohne dass Vorlagen- / Zweigdateien berührt werden.

Für die Einrichtung mehrerer Sprachen können Datumsformate auch pro Sprache eingestellt / übersetzt werden.

Augenwunder
quelle
Das ist die beste Antwort!
Sudoman
1

Sie können mithilfe der Display Suite ein eigenes Feld "Übergeben von" erstellen, um ein Token-Feld zu erstellen.

In Drupal 8 / structure / ds / fields

Dann fügen Sie ein Feld mit HTML und Token wie ...

By [node:author] on [node:created:custom:F j, Y]
Daniel Schiavone
quelle
1

Sie können das Format in node.html.twig folgendermaßen anpassen:

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

Sie können alle Formate PHP für Datum und Uhrzeit haben

// 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>
Wasim Khan
quelle
0

Um sicherzugehen, dass ich nur die Zeichen des Datums ändere, aber keine umgebenden HTML-Elemente, benutze ich den folgenden Haken:

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;
  }
}

Ersetzen Sie [theme_name]durch den Namen Ihres Themas und html_datedurch das gewünschte Zeitformat, eines davon finden Sie unter /admin/config/regional/date-time.

Philipp Zedler
quelle
-1

Ich habe den folgenden Code für node - article - full.html.twig verwendet:

<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>
Damir Dimić
quelle