Cómo cambiar la zona horaria en PHP (cPanel y Plesk)
¿Por qué es tan importante la zona horaria en tu servidor?
Cuando tu web muestra una hora incorrecta, el problema casi nunca es el reloj de tu ordenador. El problema es la zona horaria que tiene configurada PHP en tu servidor. PHP tiene su propio reloj interno, y si no le dices en qué parte del mundo está, usará la hora del servidor físico, que puede estar en otro país o incluso en otro continente.
Esto afecta a muchas cosas: la fecha de publicación de tus posts, los registros de tus formularios, las marcas de tiempo de tus envíos de email, las cookies de sesión, y sobre todo, a cualquier script que calcule fechas futuras, como recordatorios o facturación recurrente.
Cambiar la zona horaria en PHP es una de las tareas más sencillas que existen, pero también una de las que más dolores de cabeza evita. En esta guía te explico paso a paso cómo hacerlo tanto en cPanel como en Plesk, los dos paneles de control más usados en hosting compartido y VPS.
Entendiendo qué es la zona horaria de PHP
PHP tiene una función llamada date_default_timezone_set() que permite definir la zona horaria por defecto para todas las funciones de fecha y hora del script. Si no se define, PHP usa la que esté configurada en el archivo php.ini del servidor. Y si tampoco está ahí, usa la del sistema operativo.
Para que te hagas una idea, si tu servidor está en Estados Unidos y tu público está en España, sin una configuración adecuada tus usuarios verán los comentarios publicados "en el futuro" o con 6 horas de diferencia.
La buena noticia es que no necesitas ser un experto en servidores para cambiarlo. Solo necesitas saber dónde tocar, y eso es lo que te voy a enseñar.
Método 1: Cambiar la zona horaria en cPanel
cPanel es el panel más común en hosting compartido. Si tu proveedor usa cPanel, tienes varias formas de cambiar la zona horaria de PHP, desde la más sencilla (sin tocar código) hasta la más avanzada.
Opción 1: Desde el selector de versión de PHP (MultiPHP)
Esta es la forma más limpia y la que recomiendo para la mayoría de usuarios. cPanel incluye una herramienta llamada "MultiPHP INI Editor" o "Select PHP Version", según la versión de cPanel que tenga tu hosting.
Sigue estos pasos:
- Entra en tu cPanel. Normalmente accedes a través de
tudominio.com/cpanelotudominio.com:2083. - Busca la sección Software o Motor de software. Dentro, verás una opción llamada Select PHP Version o MultiPHP INI Editor.
- Haz clic en MultiPHP INI Editor. Verás una lista con los dominios que tienes en el hosting.
- Selecciona tu dominio en la lista desplegable.
- Busca la línea que dice
date.timezone. Si no la ves, puede que tengas que hacer clic en "Mostrar todas las opciones" o "Editor avanzado". - En el campo de valor, escribe tu zona horaria en formato PHP, por ejemplo:
Europe/Madrid,America/Mexico_City,America/Argentina/Buenos_Aires. - Pulsa el botón Apply o Guardar.
[TIP]
Si no sabes qué formato usar, no escribas "Madrid" a secas. El formato correcto es con la región y la ciudad separadas por una barra. Puedes consultar la lista completa de zonas horarias válidas en la documentación oficial de PHP.
Opción 2: Crear un archivo .htaccess
Si tu proveedor no tiene el MultiPHP INI Editor, o prefieres una solución que funcione siempre, puedes usar el archivo .htaccess de tu web.
El .htaccess es un archivo de configuración que afecta a todo lo que hay dentro de la carpeta donde se encuentra. Para cambiar la zona horaria con este método:
- Accede al Administrador de archivos de cPanel.
- Navega hasta la carpeta
public_html(o la carpeta raíz de tu dominio). - Si ya existe un archivo llamado
.htaccess, ábrelo con el editor de texto. Si no existe, créalo con el botón "+ Archivo". - Añade esta línea al final del archivo:
SetEnv TZ Europe/Madrid
- Guarda los cambios.
Este método funciona porque le dice al servidor web que asigne esa zona horaria a todas las peticiones PHP que pasen por ese directorio.
[WARNING]
Este método solo funciona si tu servidor tiene habilitada la directiva SetEnv y si PHP está configurado como módulo de Apache. Si tu hosting usa PHP-FPM, es posible que no funcione. En ese caso, usa el método del MultiPHP INI Editor.
Opción 3: Crear un archivo php.ini personalizado
Otra opción muy fiable es crear un php.ini propio en tu carpeta raíz. Este archivo sobreescribe la configuración global del servidor para tu dominio.
- Ve al Administrador de archivos de cPanel.
- Entra en
public_html. - Crea un archivo nuevo llamado
php.ini. - Dentro, escribe lo siguiente:
date.timezone = "Europe/Madrid"
- Guarda el archivo.
[INFO]
Si tu hosting usa LiteSpeed o Apache con mod_php, este método suele funcionar perfectamente. Si usas PHP-FPM, a veces el servidor ignora el php.ini de la carpeta y necesitas usar el MultiPHP INI Editor.
Método 2: Cambiar la zona horaria en Plesk
Plesk es el otro gran panel de control, muy usado en VPS y servidores dedicados. El proceso es un poco diferente, pero igual de sencillo.
Opción 1: Desde el administrador de PHP
Plesk tiene una herramienta integrada que te permite configurar las opciones de PHP de cada dominio.
- Entra en Plesk. Normalmente accedes a través de
tudominio.com:8443. - En el panel de la izquierda, verás la lista de tus dominios. Haz clic en el dominio que quieras configurar.
- Dentro del dominio, busca la sección PHP Settings o Configuración de PHP.
- Se abrirá una página con todas las directivas de PHP. Busca
date.timezone. - En el campo de valor, escribe tu zona horaria, por ejemplo
Europe/Madrid. - Pulsa Aplicar o Guardar.
Este es el método más limpio y el que recomiendo en Plesk.
Opción 2: Modificar el archivo php.ini del dominio
Si prefieres hacerlo a mano, Plesk también te permite editar el php.ini de cada dominio.
- Ve a Archivos dentro de tu dominio en Plesk.
- Navega hasta la carpeta
httpdocs(equivalente apublic_html). - Busca o crea el archivo
php.ini. - Añade la línea:
date.timezone = "Europe/Madrid"
- Guarda y ya está.
[INFO]
En Plesk, a diferencia de cPanel, el archivo php.ini de la carpeta del dominio suele tener prioridad sobre el global. Pero ten cuidado: si tu hosting usa PHP-FPM, es posible que necesites reiniciar el servicio PHP para que los cambios surtan efecto. En Plesk esto se hace desde Herramientas y Ajustes > Servicios de PHP.
Método 3: Cambiar la zona horaria desde el propio código PHP
Si no tienes acceso al panel de control, o si quieres una solución que funcione en cualquier hosting, puedes cambiar la zona horaria desde el propio código. Esto es útil si solo quieres cambiar la hora en una parte concreta de tu web.
Con la función date_default_timezone_set()
Al principio de tu script PHP, antes de cualquier función de fecha, añade:
<?php
date_default_timezone_set('Europe/Madrid');
echo date('H:i:s');
?>
Esta función es válida para PHP 5.1.0 y superiores. Es la forma más directa de cambiar la zona horaria para ese script en concreto.
Con el constructor DateTimeZone
Si estás usando la clase DateTime de PHP, puedes hacer lo siguiente:
<?php
$zona = new DateTimeZone('Europe/Madrid');
$fecha = new DateTime('now', $zona);
echo $fecha->format('Y-m-d H:i:s');
?>
Este método es más moderno y te permite tener varias zonas horarias en el mismo script, algo útil si tu web tiene usuarios en diferentes países.
[TIP]
Si tu web usa WordPress, no necesitas tocar código. Ve a Ajustes > Generales y cambia la opción "Zona horaria". WordPress guardará esa configuración y PHP la usará automáticamente.
¿Cómo saber cuál es tu zona horaria correcta?
Puede parecer obvio, pero mucha gente se equivoca al elegir la zona horaria. No es lo mismo "hora de Madrid" que "hora de España". PHP usa el estándar de la base de datos de zonas horarias de la IANA.
Para España, las zonas válidas son:
Europe/Madrid(península y Baleares)Atlantic/Canary(Islas Canarias)
Para Latinoamérica, ejemplos comunes:
America/Mexico_City(Ciudad de México)America/Bogota(Colombia)America/Lima(Perú)America/Santiago(Chile)America/Argentina/Buenos_Aires(Argentina)America/Caracas(Venezuela)America/Guatemala(Guatemala)America/Managua(Nicaragua)America/Panama(Panamá)America/Santo_Domingo(República Dominicana)
Para Estados Unidos:
America/New_York(Este)America/Chicago(Centro)America/Denver(Montaña)America/Los_Angeles(Pacífico)
[WARNING]
No uses abreviaturas como "CET" o "EST" en la configuración de PHP. Aunque algunas funcionan, no son fiables y pueden dar problemas con el horario de verano. Usa siempre el formato "Región/Ciudad".
Verificar que el cambio se ha aplicado correctamente
Después de hacer el cambio, es importante comprobar que realmente funciona. La forma más fácil es crear un archivo de prueba.
- Crea un archivo llamado
test_hora.phpen la raíz de tu web. - Pega este código:
<?php
echo "Zona horaria actual: " . date_default_timezone_get() . "<br>";
echo "Fecha y hora del servidor: " . date('Y-m-d H:i:s');
?>
- Abre
tudominio.com/test_hora.phpen tu navegador. - Compara la hora mostrada con la hora local de tu país.
Si la hora coincide, perfecto. Si no, revisa que el archivo de configuración se haya guardado bien y que no haya otro archivo que lo sobreescriba.
[TIP]
Después de la prueba, borra el archivo test_hora.php para que no quede accesible públicamente. Aunque no es un peligro de seguridad, es buena práctica no dejar archivos de prueba en producción.
Problemas comunes y cómo solucionarlos
El cambio no se aplica
Si has configurado la zona horaria pero sigue mostrando la hora incorrecta, puede ser por varias razones:
- Hay otro archivo de configuración que tiene prioridad. Por ejemplo, si tienes un
php.inienpublic_htmly otro en una subcarpeta, el de la subcarpeta tiene prioridad para esa subcarpeta. - PHP-FPM está en modo "proxy" o "CGI". En este caso, el
php.inide la carpeta no funciona. Tienes que usar el panel de control (cPanel MultiPHP o Plesk PHP Settings). - Hay opcache activado. A veces PHP guarda en caché la configuración anterior. Reinicia el servicio PHP o espera unos minutos.
La hora cambia sola en verano e invierno
Esto es normal y deseable. PHP usa la base de datos de zonas horarias de la IANA, que incluye las reglas de horario de verano de cada país. No tienes que hacer nada.
Uso Syspanel y no encuentro la opción de PHP
Si tu hosting usa Syspanel (antes llamado HestiaCP), el proceso es diferente. Syspanel no tiene un selector gráfico de PHP tan completo como cPanel o Plesk. Tendrás que editar el archivo php.ini manualmente.
[INFO]
En Syspanel, el acceso se realiza a través del puerto 2106. Por ejemplo: https://tudominio.com:2106. Dentro de Syspanel, ve a Web > tu dominio > Configuración PHP o edita el php.ini desde el administrador de archivos. Si no encuentras la opción, contacta con tu proveedor de hosting para que te indique la ruta exacta del php.ini de tu dominio.
Preguntas frecuentes (FAQ)
¿Qué pasa si no configuro la zona horaria?
PHP usará la hora del servidor físico. Si el servidor está en otro país, todas las fechas aparecerán con esa hora, lo que puede confundir a tus usuarios y desordenar tus registros.
¿Puedo tener zonas horarias diferentes en distintas partes de mi web?
Sí. Puedes usar date_default_timezone_set() al inicio de cada script para definir una zona horaria concreta. Esto es útil si tienes una web multirregional.
¿El cambio de zona horaria afecta a las bases de datos?
Depende. MySQL tiene su propia zona horaria independiente de PHP. Si usas funciones como NOW() en SQL, la hora será la de MySQL, no la de PHP. Para cambiarla, tendrías que modificar la configuración de MySQL en el servidor, algo que normalmente requiere acceso de administrador.
¿Y si mi web usa WordPress?
WordPress tiene su propia configuración de zona horaria en Ajustes > Generales. Si la cambias ahí, WordPress se encarga de todo. No necesitas tocar PHP directamente.
¿Cuál es la diferencia entre date.timezone y date_default_timezone_set()?
La primera es la configuración global del servidor o del dominio, se define en el php.ini. La segunda es una función de PHP que puedes llamar en tu código para sobreescribir esa configuración en ese script concreto.
Resumen final
Cambiar la zona horaria de PHP es una tarea sencilla que puede ahorrarte muchos problemas con fechas y horas en tu web. Tanto en cPanel como en Plesk tienes herramientas gráficas que te permiten hacerlo en menos de un minuto. Y si no tienes acceso a ellas, siempre puedes usar el código PHP o un archivo de configuración manual.
Lo importante es que elijas la zona horaria correcta en formato "Región/Ciudad" y que verifiques el cambio con un archivo de prueba. Si tu hosting usa Syspanel, recuerda que el acceso es por el puerto 2106 y que tendrás que editar el php.ini manualmente.
Si después de seguir todos los pasos sigues teniendo problemas, contacta con tu proveedor de hosting. Ellos tienen acceso al servidor y pueden verificar si hay algo que esté sobreescribiendo tu configuración.
Y recuerda: una hora bien configurada es la diferencia entre un comentario publicado "hace 2 horas" y uno publicado "hace 8 horas" sin que nadie entienda por qué.
