web-dev-qa-db-ja.com

記事の日付形式を変更する

Drupal 8.の記事で使用されている日付形式を変更したいのですが、デフォルトでは_Default medium date_形式を使用しているようです。_admin/config/regional/date-time_、しかし私は記事が使用するフォーマットを編集する場所を見つけることができません。

CMSからこれを行う方法はありますか、またはコードで行う必要がありますか?

21
Chris

ですから、これを調べて認めようと思う以上の時間を費やした後、これに対する2つの解決策を考え出しました。

ソリューション1

それを行う1つの方法は、darol100が彼の回答で言及した日付関数を使用することです。私のケースの彼の例を変更して、私のnode--article.html.twigファイルで、私は変更しました:

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

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

このアプローチの利点は、簡単で迅速なことです。欠点は、Drupalの組み込み日付フォーマットシステムを使用していないことです。

ソリューション2

Drupalの日付形式システムを使用するために、最初にadmin/config/regional/date-timeでカスタム形式を作成しました。次に、node--article.html.twigを次のように編集しました。

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

これは、私がカスタムフォーマットに "My Custom Format"という名前を付けたと仮定しています。これにより、マシン名はmy_custom_formatになります。

このソリューションには追加の手順が必要ですが、Drupalより多くの方法があると思います。

このページで DrupalのTwig Filters について学びました。

41
Chris

記事のコンテンツタイプレベルに基づいて日付形式を変更する場合。次のコードを編集/追加できますpost.published_at|dateとフィルターを使用して日付形式を変更します。

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は php date format と同じ命名コードを使用します。 twig日付形式の訪問に関する詳細情報- http://twig.sensiolabs.org/doc/filters/date.html

9
itsdarrylnorris

私はクリスの解決策2がもっと好きです。彼が言うようにIS more drupal way ...しかし、それはまだ最良の選択肢ではありません。

format_date()は非推奨になり、Drupal 9 ...の前に削除されます...つまり、ある日、drupal更新を行うと、これは壊れます。

代わりに、前処理関数の.themeファイルでこれを行うことをお勧めします。

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

デュークが言ったことについての観察:

format_date()は廃止され、Drupal 9 ...の前に削除されます...

はい、Drupal function format_date() defined incore/includes/common.inc実際には非推奨ですが、twig filterformat_date()を使用する場合、 Drupal関数、代わりにtwigで定義されたフィルターをDrupal in TwigExtension :: getFilters() 、そしてこのフィルターは DateFormatter :: format() を呼び出します。

したがって、twigフィルターformat_date())を使用しても安全で、Chrisのソリューション2は問題ありません。

2
camilo.escobar

既に使用されている日付形式を見つけて、UIで変更することもできます。ページに表示される内容とadmin/config/regional/date-time/の日付形式を比較してください

たとえば「デフォルトの中間日付」を変更すると、テンプレート/小枝ファイルに触れることなく、この形式を使用して日付が変更されます。

日付形式は、多言語設定用に言語ごとに設定/翻訳することもできます。

2
eye-wonder

次のように、node.html.twigのフォーマットをカスタマイズできます。

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

Display Suiteを使用してトークンフィールドを作成することにより、独自の送信者フィールドを作成できます。

Drupal 8/structure/ds/fields

次に、htmlとトークンを使用してフィールドを追加します...

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

すべてのフォーマットPHP for Date and Time)を使用できます

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

日付の文字のみを変更し、周囲のHTML要素は変更しないようにするために、次のフックを使用します。

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

[theme_name]をテーマの名前に、html_date/admin/config/regional/date-timeの下にある目的の時間形式に置き換えます。

0
Philipp Zedler