Answers:
因此,在花了比我愿意承认的更多的时间之后,我提出了两种解决方案。
解决方案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过滤器的信息。
如果要基于文章内容类型级别更改日期格式。您可以编辑/添加以下代码,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
<?php print format_date($node->created, 'custom', 'm/d/y'); ?>
。
我更喜欢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');
}
关于杜克所说的话:
format_date()已被弃用,在Drupal 9之前将被删除...
是的,实际上不建议使用core / includes / common.inc中定义的Drupal函数format_date()。但是,当您使用树枝过滤器format_date()时,您并未调用该Drupal函数,而是使用了Drupal在TwigExtension :: getFilters()中定义的树枝过滤器 ,并且此过滤器调用了DateFormatter :: format()。
因此,使用树枝过滤器format_date()是安全的,克里斯的解决方案2很好。
您可以将所有格式的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>
为确保仅更改日期字符,而不更改任何周围的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
。
我对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>