Cambiar formato de fecha del artículo

21

Me gustaría cambiar el formato de fecha que se usa para los artículos en Drupal 8. Parece que usa el Default medium dateformato por defecto. Agregué mi propio formato en admin/config/regional/date-time, pero no puedo encontrar dónde editar el formato que usan los artículos.

¿Hay alguna manera de hacer esto desde el CMS o esto debe hacerse en código?

Chris
fuente

Respuestas:

41

Entonces, después de pasar más tiempo del que me gustaría admitir que investigé esto, se me ocurrieron dos soluciones.

Solución 1

Una forma de hacerlo es con la función de fecha que darol100 mencionó en su respuesta. Modificando su ejemplo para mi caso, en mi node--article.html.twigarchivo, cambié:

{% trans %}Submitted by {{ author_name }} on {{ date }}{% endtrans %}

a

{% set createdDate = node.getCreatedTime|date('j F Y') %}
{% trans %}Submitted by {{ author_name }} on {{ createdDate }} {% endtrans %}

La ventaja de este enfoque es que es fácil y rápido. La desventaja es que no estoy usando el sistema de formato de fecha incorporado de Drupal.

Solución 2

Para usar el sistema de formato de fecha de Drupal, primero creé mi formato personalizado en admin/config/regional/date-time. Luego edité node--article.html.twiglo siguiente:

{% set createdDate = node.getCreatedTime|format_date('my_custom_format') %}
{% trans %}Submitted by {{ author_name }} on {{ createdDate }} {% endtrans %}

Esto supone que llamé a mi formato personalizado " Mi formato personalizado ", que da como resultado el nombre del equipo my_custom_format.

Si bien esta solución requiere un paso adicional, creo que es la forma más drupal de hacerlo.

Lo aprendí en esta página sobre los filtros Twig de Drupal .

Chris
fuente
9

Si desea cambiar la base del formato de fecha en el nivel de tipo de contenido del artículo. Puede editar / agregar el siguiente código post.published_at|datey usar un filtro para modificar el formato de fecha.

nodo - 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 usa el mismo código de nombres que el formato de fecha php . Para obtener más información sobre los formatos de fecha de ramita, visite: http://twig.sensiolabs.org/doc/filters/date.html

itsdarrylnorris
fuente
1
¡Pulgares arriba! darol100, ¿Se puede hacer esto en archivos TPL de la misma manera para alguien con el sitio Drupal 7?
JohnDoea
1
Sí, pero usa la plantilla PHP en lugar de la sintaxis de ramita. También debería verse algo así <?php print format_date($node->created, 'custom', 'm/d/y'); ?>.
itsdarrylnorris
Gracias darol100, esto fue bastante útil para ayudarme a aprender sobre los filtros Twig. Finalmente, sin embargo, utilicé el filtro format_date que Drupal proporciona (como lo muestro en mi respuesta).
Chris
8

Estoy más por la solución de Chris 2. Como él dice, ES más la forma de drupal ... pero aún no es la mejor opción.

format_date () ha quedado en desuso y se eliminará antes de Drupal 9 ... lo que significa que un día, harás una actualización de drupal y esto se romperá.

En cambio, es mejor hacer esto en su archivo .theme en una función de preproceso.

function [theme_name]_preprocess_node(&$variables) {
  $variables['date'] = \Drupal::service('date.formatter')->format($variables['node']->getCreatedTime(), 'my_custom_format');
}
Duque
fuente
2

Una observación sobre lo que dijo Duke:

format_date () ha quedado en desuso y se eliminará antes de Drupal 9 ...

Sí, la función Drupal format_date () definida en core / includes / common.inc es, de hecho, obsoleta. Pero cuando usa el filtro de ramita format_date () NO está llamando a esa función Drupal, en lugar de eso está usando el filtro de ramita definido por Drupal en TwigExtension :: getFilters () , y este filtro llama a DateFormatter :: format () .

Por lo tanto, usar el filtro twig format_date () es seguro y la solución 2 de Chris está bien.

camilo.escobar
fuente
2

También es posible encontrar el formato de fecha que ya está en uso y simplemente cambiarlo en la interfaz de usuario. Simplemente compare lo que ve en la página con los formatos de fecha enadmin/config/regional/date-time/

Si cambia, por ejemplo, "Fecha media predeterminada", cambiará las fechas usando este formato sin tocar ningún archivo de plantilla / ramita.

Los formatos de fecha también se pueden configurar / traducir por idioma para la configuración en varios idiomas.

maravilla de los ojos
fuente
¡Esta es la mejor respuesta!
Sudoman
1

Puede crear su propio campo Enviado por utilizando Display Suite para crear un campo Token.

En Drupal 8 / structure / ds / fields

Luego agregue un campo usando html y tokens como ...

By [node:author] on [node:created:custom:F j, Y]
Daniel Schiavone
fuente
1

Puede personalizar el formato en node.html.twig de esta manera:

{{ node.createdtime|date(format="Y-m-d") }}
Enrique
fuente
0

Puede tener todos los formatos PHP para fecha y hora

// 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>
Wasim Khan
fuente
0

Para asegurarme de cambiar solo los caracteres de la fecha pero no los elementos HTML que lo rodean, utilizo el siguiente enlace:

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;
  }
}

Reemplácelo [theme_name]con el nombre de su tema y html_datecon el formato de hora deseado, uno de los que encontrará debajo /admin/config/regional/date-time.

Philipp Zedler
fuente
-1

Usé el siguiente código para 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>
Damir Dimić
fuente