Ubah format tanggal artikel

21

Saya ingin mengubah format tanggal yang digunakan untuk artikel di Drupal 8. Sepertinya menggunakan Default medium dateformat secara default. Saya menambahkan format sendiri di admin/config/regional/date-time, tetapi saya tidak dapat menemukan tempat untuk mengedit format yang digunakan artikel.

Apakah ada cara untuk melakukan ini dari CMS atau apakah ini perlu dilakukan dalam kode?

Chris
sumber

Jawaban:

41

Jadi setelah menghabiskan lebih banyak waktu daripada yang saya akui mengakui melihat ke dalam ini, saya telah datang dengan dua solusi untuk ini.

Solusi 1

Salah satu cara untuk melakukannya adalah dengan fungsi tanggal yang disebutkan darol100 dalam jawabannya. Mengubah contohnya untuk kasus saya, dalam node--article.html.twigfile saya , saya mengubah:

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

untuk

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

Keuntungan dari pendekatan ini adalah mudah dan cepat. Kerugiannya adalah saya tidak menggunakan sistem format tanggal bawaan Drupal.

Solusi 2

Untuk menggunakan sistem format tanggal Drupal, saya pertama kali membuat format kustom saya di admin/config/regional/date-time. Kemudian saya edit node--article.html.twigsebagai berikut:

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

Ini mengasumsikan saya menamai format kustom saya " Format Kustom Saya ", yang menghasilkan nama mesin my_custom_format.

Sementara solusi ini membutuhkan langkah ekstra, saya merasa ini adalah cara yang lebih Drupal untuk melakukannya.

Saya mempelajarinya di halaman ini tentang Filter Ranting Drupal .

Chris
sumber
9

Jika Anda ingin mengubah format tanggal berdasarkan level tipe konten artikel. Anda dapat mengedit / menambahkan kode berikut post.published_at|datedan menggunakan filter untuk mengubah format tanggal.

simpul - 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 #}

Ranting menggunakan kode penamaan yang sama dengan format tanggal php . Untuk informasi lebih lanjut tentang format tanggal ranting kunjungi - http://twig.sensiolabs.org/doc/filters/date.html

itsdarrylnorris
sumber
1
Jempol! darol100, dapatkah ini dilakukan dalam file TPL dengan cara yang sama untuk seseorang dengan situs Drupal 7?
JohnDoea
1
Ya, tetapi menggunakan templat PHP alih-alih ranting sintaks. Seharusnya terlihat seperti ini juga <?php print format_date($node->created, 'custom', 'm/d/y'); ?>.
itsdarrylnorris
Terima kasih darol100, ini cukup berguna dalam membantu saya mempelajari tentang filter Twig. Namun pada akhirnya, saya menggunakan filter format_date yang disediakan Drupal (seperti yang saya tunjukkan dalam jawaban saya).
Chris
8

Saya lebih menyukai solusi Chris 2. Seperti yang dikatakannya, ini lebih merupakan cara drupal ... tapi itu belum merupakan pilihan terbaik.

format_date () telah usang dan akan dihapus sebelum Drupal 9 ... artinya suatu hari, Anda akan melakukan pembaruan drupal dan ini akan rusak.

Alih-alih, lebih baik melakukannya di file tema. Anda dalam fungsi preprocess.

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

Pengamatan tentang apa yang dikatakan Duke:

format_date () telah ditinggalkan dan akan dihapus sebelum Drupal 9 ...

Ya, fungsi format Drupal format_date () didefinisikan dalam inti / include / common.inc , pada kenyataannya, sudah usang. Tetapi, ketika Anda menggunakan filter ranting format_date () Anda TIDAK memanggil fungsi Drupal, alih-alih Anda menggunakan filter ranting yang didefinisikan oleh Drupal di TwigExtension :: getFilters () , dan filter ini memanggil DateFormatter :: format () .

Oleh karena itu, menggunakan filter ranting format_date () aman dan solusi 2 Chris baik-baik saja.

camilo.escobar
sumber
2

Dimungkinkan juga untuk menemukan format tanggal yang sudah digunakan, dan hanya mengubahnya di UI. Bandingkan saja apa yang Anda lihat di halaman dengan format tanggal diadmin/config/regional/date-time/

Jika Anda mengubah mis. "Default medium date" itu akan mengubah tanggal menggunakan format ini tanpa menyentuh file templat / ranting.

Format tanggal juga dapat diatur / diterjemahkan per bahasa untuk pengaturan multi bahasa.

mata-heran
sumber
Ini jawaban terbaik!
sudoman
1

Anda dapat membuat bidang Submitted By Anda sendiri dengan menggunakan Display Suite untuk membuat Bidang Token.

Di Drupal 8 / struktur / ds / bidang

Kemudian tambahkan bidang menggunakan html dan token seperti ...

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

Anda dapat menyesuaikan format dalam node.html.twig seperti ini:

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

Anda dapat memiliki semua format PHP untuk Tanggal dan Waktu

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

Untuk memastikan bahwa saya hanya mengubah karakter tanggal tetapi tidak pada elemen HTML di sekitarnya, saya menggunakan kait berikut:

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

Ganti [theme_name]dengan nama tema Anda dan html_datedengan format waktu yang Anda inginkan, salah satunya yang Anda temukan di bawah /admin/config/regional/date-time.

Philipp Zedler
sumber
-1

Saya menggunakan kode berikut untuk simpul - artikel - 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>
Damir Dimic
sumber