¿Cómo imprimir un formato de fecha personalizado en Twig?

14

¿Cómo puedo imprimir un formato de fecha personalizado en Twig? En primer lugar, estoy tratando de editar el field.html.twigcampo llamado field_publication_date, en ese archivo encuentro esta variable {{ item.content }}que imprime Jun, 12/06/2016 - 12:29.

Esto es lo que he intentado: {{ item.content.field_publication_date|format_date('M') }}

Ricardo Castañeda
fuente

Respuestas:

16

Intenta usar esto :

{{ item.content.field_publication_date|date("M") }}

Pero, creo que obtendrá su solución en

{{ item.content|date("M") }}

Donde item.contentcontiene la cadena de fecha dentro del campo - nodo - field-publishing-date.html.twig .

Ashish Deynap
fuente
2
format_datedebería ser la función, haciendo referencia a un formato de fecha de Drupal
Kevin
1
Se hizo referencia desde aquí- twig.sensiolabs.org/doc/2.x/filters/date.html
Ashish Deynap
1
Gracias. La primera opción funcionó para mí {{item.content.field_publication_date | date ("M")}}
Ricardo Castañeda
2
Si es un campo de fecha, ¿por qué no son suficientes los ajustes del formateador de campo? Además, si se trata de una marca de tiempo, format_date es un filtro de ramita de Drupal al que puede pasar formatos de fecha personalizados a: drupal.org/docs/8/theming/twig/…
Kevin
1
@kevin fingí usar display suite y por token mostrar las fechas en diferentes divs. Pero de alguna manera la fecha personalizada no funcionó para mí.
Ricardo Castañeda
14

Primero, cree el formato de fecha personalizado my_custom_date_formaten la sección de configuración del administrador de drupal.

En segundo lugar, use el format_datefiltro Twig, como aquí:

{{ node.created.value|format_date('my_custom_date_format') }}

Puede ser necesario convertir la fecha a una marca de tiempo de Unix, primero. Eso se verá así:

{{ node.my_date_field.value|date('U')|format_date('my_custom_date_format') }}
Philipp Zedler
fuente
1
El segundo ejemplo de código no funcionó para mí, ya que el "valor" en la matriz de contenido (content.field_date.value) era nulo. Sospecho que aparece o no en función del formateador de pantalla utilizado para ese campo. Tuve que usar node.field_date.value|date('U')en su lugar.
George
@George tiene razón, la .valueclave generalmente solo está disponible para campos de entidades como node, usero paragraph, pero no dentro de las matrices de representación ( content). Edité el segundo ejemplo para usar la nodevariable
Hudri
2

El \Drupal\datetime\Plugin\Field\FieldType\DateTimeItemtiene un valor y una propiedad de fecha. El valuees UTC y datese calcula. Use la propiedad de fecha para evitar tener que lidiar con la zona horaria, y puede usar un formato creado o uno personalizado:

{{ node.field_publication_date.date|format_date('custom', 'F j, Y') }}

Formato de fecha en Drupal:

{{ node.field_publication_date.date|format_date('my_custom_date_format') }}

joelpittet
fuente
Esto es lo que funcionó para mí: {{node.field_event_date.date | date ('U') | format_date ('custom', 'F j, Y')}}
arnoldbird
Hola @arnoldbird, ¿puedes explicarme qué date('U')hace?
Aman Devrath
1

Sé que esta pregunta se refiere específicamente a formatear el valor de un campo de fecha dado, pero necesitaba formatear la fecha en que se creó el nodo. En caso de que lo necesite, esto es lo que funciona para mí (después de probar varias opciones diferentes):

{{ node.getCreatedTime|format_date('medium') }}

Aquí es donde obtuve esta solución de: https://www.drupal.org/forum/support/theme-development/2016-02-17/how-to-get-formatted-node-creation-date-in-d8 # comentario-10865464

Marcos Buarque
fuente
0

Esto funcionó para mí. El valor de fecha con la función de formato date () de twig:

{{ content.field_arrival_date.value | date("Y/m/d") }}
Robb Davis
fuente