Cómo dar formato a las fechas en Drupal 10

Enviado por christian el

Me estoy encontrando en varios proyectos que los formatos de las fechas son muy dispares (en algunos solo quiero mostrar la hora, en otros tengo que mostrar la hora, el día y el mes pero de forma separada en diferentes sitios, etc...) y esto hace que la gestión de las fechas desde el propio Drupal sea complejo.

 

Porqué?

Porque desde los modos de vista de Drupal, solo puedes gestionar la visualización del formato una vez. Es decir, si tengo un contenido con un campo fecha, solo puedo configurar un formato de fecha para ese campo por lo que no podría ver, por ejemplo, la misma fecha en dos formatos diferentes. Esto es un problema en la mayoría de los casos ya que las fechas son un componente muy importante en muchos sitios web (un calendario por ejemplo)

 

Solución

La solución más simple sería la de formatear la fecha en la plantilla de tu contenido de cada vez usando las funciones propias de PHP (date_create y date_format). El problema que tiene esto es que, si tu servidor tiene una configuración diferente de zona horaria que tu sitio esto no te sirve ya que te daría el formato de fechas des-actualizado

Lo correcto sería usar el "wrapper" de gestión de fechas de Drupal ya que tiene en cuenta la zona horaria de tu sitio web y, si aplica, incluso puede gestionar las zonas horarias de cada uno de los usuarios.

El wrapper es un servicio integrado en el core llamado "date.formatter"

 

Ejemplo

Pongamos el ejemplo de que quiero mostrar la fecha (día y hora) en dos campos diferentes:

# Obtenemos el campo de fecha DateTime del nodo actual para poder procesarlo
$fecha = $nodo->campo_de_fecha->date;

# Para el formateo, necesitamos la fecha en timestamp
$fecha = $fecha->getTimestamp()

# Vamos a sacar el día por un lado
$dia = \Drupal::service('date.formatter')->format($fecha, 'nombr_formato', 'd');

# Y la hora por otro
$hora =  \Drupal::service('date.formatter')->format($fecha, 'nombr_formato', 'H:i');

De esta forma tenemos dos variables ($dia y $hora), que podremos enviar en el hook_preprocess_hook a nuestro front/plantilla twig y poder pintarlo de forma independiente

Dinahosting: dominios y alojamiento web
My investor

Regístrate en MyInvestory tendrás un extra de 20€ ! :D

Usa el código U048395 y te llevas un regalo en tu primera inversión :)

Usa el código 22c80f y te llevas un regalo en tu primera inversión :)