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


21

Drupal 8の記事に使用される日付形式を変更したいのDefault medium dateですが、デフォルトでこの形式を使用しているようです。独自の形式をに追加しましたが、admin/config/regional/date-time記事が使用する形式を編集する場所が見つかりません。

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

回答:


41

ですから、私がこれを検討することを認めるよりも多くの時間を費やした後、これに対する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について学びました。


9

記事のコンテンツタイプレベルに基づいて日付形式を変更する場合。次のコード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日付形式と同じ命名コードを使用します。小枝の日付形式の詳細については、http://twig.sensiolabs.org/doc/filters/date.htmlをご覧ください。


1
いいね!darol100、これはDrupal 7サイトを持つ人に対して同じ方法でTPLファイルで実行できますか?
-JohnDoea

1
はい。ただし、小枝構文の代わりにPHPテンプレートを使用します。これも何かに見えるはず <?php print format_date($node->created, 'custom', 'm/d/y'); ?>です。
-itsdarrylnorris

darol100に感謝します。これは、Twigフィルターについて学ぶのに非常に役立ちました。ただし、最終的には、Drupalが提供するformat_dateフィルターを使用しました(回答に示したとおり)。
クリス

8

私はクリスのソリューション2の方が好きです。彼が言っているように、それはより重要な方法です...

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

2

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

format_date()は非推奨になり、Drupal 9の前に削除されます...

はい、core / includes / common.incで定義されているDrupal関数format_date()は、実際、非推奨です。ただし、小枝フィルターformat_date()を使用するときは、そのDrupal関数を呼び出すのではなく、TwigExtension :: getFilters()でDrupalによって定義された小枝フィルターを使用し、 このフィルターはDateFormatter :: format()を呼び出します。

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


2

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

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

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


これがベストアンサーです!
sudoman

1

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

Drupal 8 / structure / ds / fieldsで

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

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

1

node.html.twigの形式は、次のようにカスタマイズできます。

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

0

日付と時刻のすべての形式のPHPを使用できます

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

日付の文字のみを変更し、周囲の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希望の時刻形式(で見つけられる形式の1つ)に置き換えます/admin/config/regional/date-time


-1

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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.