nodes – ¿Cómo puedo usar "hace xx veces" como formato de fecha?

Pregunta:

¿Cómo puedo usar 'xx time ago' para el formato de fecha en los nodos de Drupal 8?

Quiero reemplazar "hace xx veces" con {{fecha}} en el nodo.

En Drupal 7 funcionó con este código:

<?php
 print format_interval(time()-$node->created);
?>

Respuesta:

Hay dos formas de abordar esto.

Una es simplemente usar los formateadores de campo. Si tiene un campo DateTime, simplemente vaya a Manage Display y cambie el formato a Time ago . Luego haga clic en el engranaje y elija algunas opciones. Estos son conscientes de la caché que aparecerán en la página, pero puede terminar con una vida útil corta de la caché en algunas situaciones.

El otro es usar un template_preprocess_node() . Esto es preferible cuando tiene una marca de tiempo que no es un campo. Luego, usa el servicio de formateador de fecha para representar la marca de tiempo en formato timeago. Es preferible utilizar las versiones de formatDiff () en lugar de formatInterval () (aunque no se desaprueba formalmente, se desaconseja).

function MYTHEME_preprocess_node(&$variables) {
  /** @var \Drupal\Core\Datetime\DateFormatterInterface $formatter */
  $date_formatter = \Drupal::service('date.formatter');
  $request_time = \Drupal::time()->getRequestTime();
  $variables['foo'] = $date_formatter->formatDiff($request_time - 12345, $request_time, [
    'granularity' => 3,
    'return_as_object' => TRUE,
  ])->toRenderable();
}

Cuando especifica 'return_as_object' => TRUE con las funciones formatDiff (), se devuelve un objeto FormattedDateDiff , que contiene la cadena formateada, así como una entrada [#cache]['max-age'] mayormente precisa en una matriz de renderizado para Haga que esto funcione con el nuevo sistema de almacenamiento en caché de Drupal 8. Entonces puedes usar {{ foo }} en tu plantilla Twig; el motor de renderizado hará lo correcto con la matriz de renderizado en lugar de una cadena simple.

También lea los documentos en DateFormatterInterface para las formatTimeDiffSince() y formatTimeDiffUntil() , y para las $options you can pass in .

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım