Obtener fecha/hora actual en WordPress
En mi plugin, estoy tratando de obtener la fecha/hora actual del blog en el código pero parece estar devolviendo una fecha/hora extraña. Si publico una nueva entrada en el blog muestra la fecha/hora correcta, así que no estoy seguro de cuál es el problema. ¿Estoy manejando el código incorrectamente? (Hora de publicación: Publicado el: 13 Feb, 2012 @ 22:45)
Código PHP
<?
$t_time = get_the_time( __( 'Y/m/d g:i:s A' ) );
echo "<h1>HORA DEL BLOG</h1>";
echo $t_time . "<br>";
echo "<br>";
echo "<h1>HORA DEL SERVIDOR</h1>";
echo date("Y/m/d g:i:s A");
?>
SALIDA HORA DEL BLOG 2011/05/20 10:28:16 PM
HORA DEL SERVIDOR 2012/02/14 5:41:35 AM

Existe una función en WordPress llamada current_time();
a la que puedes pasarle ya sea 'timestamp' o 'mysql' y te devolverá una hora.
Para más información: https://developer.wordpress.org/reference/functions/current_time/

+1. Agregaría que WordPress fuerza la zona horaria del servidor a UTC, por lo que deberías usar las funciones de WordPress (ya que tienen esto en cuenta) en lugar de las nativas de PHP.

Desde WordPress 5.3, current_time( 'timestamp' )
está obsoleto y no se recomienda su uso. Si necesitas obtener una hora ajustada a la configuración de zona horaria del sitio, se recomienda utilizar las siguientes funciones:
1. current_datetime()
2. time()
3. get_post_datetime()
4. get_post_timestamp()
¿Por qué este cambio?
El componente de Fecha/Hora dependía del timestamp de WordPress (antes de WordPress 5.3), lo cual causaba muchos errores y limitaciones para mantenerse al día con las actualizaciones de PHP.
Más información detallada aquí: https://make.wordpress.org/core/2019/09/23/date-time-improvements-wp-5-3/

Código
El código correcto actual (2020) para mostrar una fecha y hora completa en formato localizado es mediante la nueva función de WordPress wp_date()
:
echo wp_date( get_option( 'date_format' ), get_post_timestamp() )
. wp_date( get_option( 'time_format' ), get_post_timestamp() );
Este fragmento de código relativamente corto:
- obedece las opciones de formato solicitadas para fecha y hora desde la Configuración de WordPress
- realiza las traducciones correspondientes
- aplica la zona horaria correcta según la Configuración
- se considera la mejor práctica en 2021 y en adelante.
Razonamiento
Con el lanzamiento de wp_date()
en WordPress 5.3 (2019), WordPress ha avanzado mucho en solucionar la forma confusa y problemática en que funcionaba el tiempo dentro de WordPress, específicamente, el problema donde las marcas de tiempo de WordPress no eran iguales a las marcas de tiempo Unix (es decir, el valor de time()) sino que tenían el desplazamiento de zona horaria añadido. La confusión surgía porque en el mundo Unix, el resultado de time() (también conocido como "marca de tiempo Unix") históricamente siempre estaba en formato GMT, y se agravaba por el uso del término "marca de tiempo Unix" para describir estas "marcas de tiempo de WordPress". La nueva función wp_date()
realiza la localización que normalmente necesitarías y funciona correctamente con los valores de marca de tiempo GMT proporcionados.
Ten en cuenta que usar la función de PHP date_default_timezone_set()
para establecer una zona horaria del sitio (distinta a la local) seguirá rompiendo WordPress, pero ahora hay alternativas que funcionan como se esperaría. Es importante señalar que el uso de date_default_timezone_set()
ahora se detecta en Salud del sitio como 'crítico', ya que romperá el manejo del tiempo dentro de WordPress y algunos plugins; si lo usas en código antiguo, deberías eliminarlo lo antes posible y reemplazar tu uso de date()
con wp_date()
.
Documentación
Una introducción más completa a las nuevas funciones de fecha y hora, escrita por el equipo que desarrolló el nuevo código, se encuentra aquí: https://make.wordpress.org/core/2019/09/23/date-time-improvements-wp-5-3/
Ten en cuenta que algunas de las nuevas funciones devuelven objetos PHP DateTimeImmutable
, lo que facilita considerablemente la vida. Además, todas las funciones mencionadas en la introducción enlazada ahora son parte del núcleo y, por lo tanto, tienen páginas del manual de PHP en los lugares habituales.
También incluyen notas sobre qué usar y qué no usar (aunque en este momento carecen de ejemplos de código).
