更改文章日期格式


21

我想更改Drupal 8中用于文章的日期格式。看起来它Default medium date默认使用该格式。我在处添加了自己的格式admin/config/regional/date-time,但是找不到在哪里编辑文章使用的格式。

有没有办法从CMS做到这一点,或者这需要用代码完成吗?

Answers:


41

因此,在花了比我愿意承认的更多的时间之后,我提出了两种解决方案。

解决方案1

一种实现方法是使用darol100在他的答案中提到的date函数。针对我的案例修改他的示例,在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

尽管此解决方案需要额外的步骤,但我认为这是Drupal的更多实现方式。

我在本页上了解了有关Drupal的Twig过滤器的信息


9

如果要基于文章内容类型级别更改日期格式。您可以编辑/添加以下代码,post.published_at|date并使用过滤器更改日期格式。

节点--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格式相同的命名代码。有关细枝日期格式的更多信息,请访问-http://twig.sensiolabs.org/doc/filters/date.html


1
竖起大拇指!darol100,对于拥有Drupal 7站点的人,可以用相同的方式在TPL文件中完成吗?
JohnDoea

1
是的,但是使用PHP模板而不是twig语法。这看起来也应该如此 <?php print format_date($node->created, 'custom', 'm/d/y'); ?>
itsdarrylnorris '16

谢谢darol100,这对帮助我了解Twig过滤器非常有用。但是最终,我还是使用了Drupal提供的format_date过滤器(正如我在回答中所示)。
克里斯

8

我更喜欢Chris的解决方案2。正如他所说,这更像是Drupal方式...但是,这并不是最好的选择。

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函数,而是使用了Drupal在TwigExtension :: getFilters()中定义的树枝过滤器 ,并且此过滤器调用了DateFormatter :: format()

因此,使用树枝过滤器format_date()是安全的,克里斯的解决方案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所需的时间格式替换,您可以在下找到其中一种/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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.