"Date (): no es seguro confiar en la configuración de zona horaria del sistema ..."


359

Recibí este error cuando solicité actualizar la versión de PHP de 5.2.17 a PHP 5.3.21 en el servidor.

<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for 'EDT/-4.0/DST' instead</p>
<p>Filename: libraries/Log.php</p>
<p>Line Number: 86</p>

</div>
Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for 'EDT/-4.0/DST' instead in /filelocation right here/system/libraries/Log.php on line 86

Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for 'EDT/-4.0/DST' instead in /filelocation right here/system/libraries/Log.php on line 99
<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for 'EDT/-4.0/DST' instead</p>
<p>Filename: libraries/Log.php</p>
<p>Line Number: 99</p>

</div>

Respuestas:


556

Probablemente necesite colocar la zona horaria en una línea de configuración en su php.iniarchivo. Debería tener un bloque como este en su archivo php.ini:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = America/New_York

Si no, agréguelo (reemplazando la zona horaria por la suya). Después de configurar, asegúrese de reiniciar httpd ( service httpd restart).

Aquí está la lista de zonas horarias compatibles .


12
para ser claros, después de hacer este cambio, asegúrese de sudo el servicio apache2 restart
Ryan

2
Esto lo resolvió para mí cuando otras soluciones no lo hicieron. Solo recibí este error cuando utilicé las funciones de fecha en la misma página que la integración con Amazon SES. Quizás eso ayude a alguien más.
master_gracey

99
Si está utilizando PHP CLI (php -r o php -a) dentro de su terminal de cliente, debe editar el archivo CLI php.ini, no apache2. Su archivo CLI php.ini generalmente se puede encontrar en
/etc/php5/cli/php.ini

2
Al igual que el primer comentario sobre Apache, también debe reiniciar IIS para que esto surta efecto en Windows / IIS.
jross

2
Esto resuelve mi problema! Solo una información para los no expertos como yo, para encontrar la php.iniutilizada por apache, simplemente ejecute el siguiente comando php -i | grep php.ini.
Joël Salamin

198

Si no puede modificar su configuración de php.ini, también podría usar el siguiente fragmento al comienzo de su código:

date_default_timezone_set('Africa/Lagos');//or change to whatever timezone you want

La lista de zonas horarias se puede encontrar en http://www.php.net/manual/en/timezones.php .


77
Por alguna razón, configurar date.timezone = America / New_York en mi php.ini y reiniciar apache no detuvo este mensaje de error al ejecutar un script usando swiftmailer. Terminé también teniendo que agregar date_default_timezone_set ('America / New_York'); en la parte superior del guión como se sugiere. ¡Gracias!
kyle

Probé tu solución. Ahora, el error es 500 error interno del servidor. Estoy usando apache 2.xy codeigniter.
Hafiz Shehbaz Ali

@ShehbazAli Debes haber hecho algo mal. ¿En cuál de sus scripts agregó el fragmento?
Babatunde Adeyemi

El mismo código está trabajando en la producción. No hay error He instalado el apache, php y MySQL manualmente en la ventana 10. PHP, MySQL y Apache funcionan. Pero, este proyecto está dando error.
Hafiz Shehbaz Ali

72

Agregue lo siguiente en su index.phparchivo. La primera vez que me encontré con esto fue cuando moví mi aplicación de mi servidor XAMPP a Apache 2.2 y PHP 5.4 ...

Le aconsejaría que lo haga en su index.phparchivo en lugar del php.iniarchivo.

if( ! ini_get('date.timezone') )
{
    date_default_timezone_set('GMT');
}

3
excelente solución para cuando no necesariamente tiene acceso completo al sistema, supongo que esta es para personas con acceso limitado o que necesitan una solución más robusta, y combinándola con la edición de php.ini si puede
aqm

18
<? print(gmdate("Y")); ?> 

en vez de

<? print(date("Y")); ?>

funcionó para mí (muestra el año actual y ya no muestra el mensaje de error). (Gracias a Chris arriba)


15

Si estas no son tus opciones

  • La modificación php.ini.
  • Añadiendo date_default_timezonellamada.

En lugar de que datepuedas usar gmdate.

Lo he usado gmdate( "Y" )cuando necesitaba un año para un snipplet de copyright.




11

@Justis me indicó la dirección correcta, pero su código no funcionó para mí. Esto hizo:

// set the default timezone if not set at php.ini
if (!date_default_timezone_get('date.timezone')) {
    // insert here the default timezone
    date_default_timezone_set('America/New_York');
}

Documentación: http://www.php.net/manual/en/function.date-default-timezone-get.php

Esta solución no es solo para aquellos que no tienen acceso completo al sistema. Es necesario para cualquier secuencia de comandos cuando se la proporciona a otra persona que no sea usted. Nunca se sabe en qué servidor se ejecutará el script cuando lo distribuya a otra persona.


5

Este problema me ha estado molestando durante ALGUNAS veces, ya que estoy tratando de inyectar un script "createbucket.php" en el compositor y me siguen diciendo que mi zona horaria es incorrecta.

Al final, lo único que solucionó el problema fue: $ sudo nano /etc/php.ini

Buscar zona horaria

[Date]
; Defines the default timezone used by the date functions
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = UTC

Asegúrese de eliminar el ;

Entonces finalmente

$ sudo service httpd restart

Y estarás listo para ir :)


5

Tuve que ponerlo entre comillas dobles.

date_default_timezone_set("America/Los_Angeles"); // default time zone

Todavía no tengo trabajo (en Mac OSX), así que eventualmente me /etc/php.ini: date.timezone = America/Los_Angeles
quebré

3

Puede configurar la zona horaria en su .htaccessarchivo

php_value date.timezone UTC

Esto debería funcionar en el caso de que php.ini todavía devuelva la advertencia a pesar de haberlo configurado (php 5.4. *). Trabajó para mi.
Christian Bonato el

2

Además de configurar date.timezone = como se menciona en varias respuestas, encontré un error en el archivo php.ini que impedía que llegara a date.timezone. La forma en que lo encontré fue ejecutando php desde la línea de comandos en una terminal. esto causó que se informara un error en la línea 114. En mi caso, había descomentado una configuración para mostrar errores que tenían '|' entre 2 valores No le gustó. Eliminé uno de los valores y el | y todo estuvo bien después de eso


1

Un método simple para dos zonas horarias.

<?php 
$date = new DateTime("2012-07-05 16:43:21", new DateTimeZone('Europe/Paris')); 

date_default_timezone_set('America/New_York'); 

echo date("Y-m-d h:iA", $date->format('U')); 

// 2012-07-05 10:43AM 
?>


0

Una solución rápida mientras rectifica las incompatibilidades es deshabilitar la notificación de errores en su index.phparchivo:

Inserte la línea de abajo en su index.php a continuacióndefine( ‘_JEXEC’, 1 );

error_reporting( E_ERROR | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR |
E_COMPILE_WARNING );

0

Estoy alojando mi bucket EC2 y S3 en la región us-west-2 (Oregon). Cuando estaba llamando $s3client->listBuckets()para enumerar los cubos existentes en mi php, recibí una excepción: "Uncaught exception 'Exception' with message 'DateTime::__construct(): It is not safe to rely on the system's timezone settings...". realicé los siguientes cambios para que funcione. Compartir estos detalles en caso de que alguien se enfrente a un problema similar y alguna de las respuestas anteriores no haya ayudado.

  1. Según la documentación @ AWS Configuración del protocolo de tiempo de red (NTP) , confirme que el estado del servicio ntpd está bien ejecutando el ntpstatcomando. Si obtiene un error, este enlace lo ayuda a saber qué está yendo mal.
  2. Abrió el archivo /etc/php.ini (algunos pueden tenerlo en una ruta diferente según la versión de php instalada) y descubrió que date.timezoneno estaba configurado en ningún valor y también fue comentado por defecto. No comenté quitando ';' antes de esta línea y establezca su valor en "UTC"y guarde el archivo.
  3. Se reiniciaron los demonios http y ntp con los comandos sudo service httpd restarty sudo service ntpd restart.

Después de esto, puedo enumerar los cubos con éxito sin ninguna excepción. Espero que esto ayude.


0

Si usa Plesk, pruébelo. Primero, abra la configuración de PHP, en la parte inferior de la página, cambie date.timezone de DEFAULT a UTC.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí


0

Tuve este error al ejecutar php-fpm en una cárcel chroot. Intenté crear etc / php.ini y / usr / share / zoneinfo en el directorio chroot, pero simplemente no funcionó. Incluso intenté colocar los demonios php-fpm para ver qué archivo les faltaba, nada saltó.

Entonces, en caso de que Google lo traiga aquí porque obtiene este error cuando usa php-fpm configurado para chroot, probablemente pueda solucionarlo agregando esta línea /etc/php-fpm.d/www.confen la sección ENV:

env[TZ] = America/New_York

Normalmente se requiere un reinicio de php-fpm para que surta efecto. Espero que esto ayude a alguien por ahí.


0

En mi caso particular, tengo PHP configurado para usar PHP-FPM (FastCGI Process Manager). Al ejecutar phpinfo()desde CLI, vi la zona horaria correcta que había configurado en php.ini, sin embargo, todavía era incorrecta en el navegador y causaba que mi código fallara. Simplemente necesitaba reiniciar el php-fpmservicio en el servidor.

service rh-php56-php-fpm restart

Es posible que también deba reiniciar el httpdservicio si editó elphp.ini

service httpd restart

0

Esta respuesta anterior de CtrlX es la respuesta correcta, pero puede no funcionar completamente. Agregué esta línea a mi archivo php.ini :

date.timezone = "America/Los_Angeles"

pero no eliminó el error PHP para todos mis archivos porque algunos de mis scripts PHP están en subcarpetas. Así que tuve que editar el archivo .htaccess para configurar php.ini para usarlo de forma recursiva (en subcarpetas):

suphp_configpath /home/account_name/public_html

donde account_name es su nombre de cuenta de cpanel y public_html es la carpeta en la que se encuentra su archivo php.ini.


0

Para usuarios de docker: cree un archivo timezone.ini local en su proyecto, configure la configuración en docker-compose.yml,

    volumes:
        - "./docker/config/timezone.ini:/usr/local/etc/php/conf.d/timezone.ini"

timezone.ini

    date.timezone=Australia/Sydney

0

Si no tiene acceso al archivo php.ini, cree o edite un .htaccessarchivo en la raíz de su dominio o sub y agregue esto (generado por cpanel):

<IfModule mime_module>
AddType application/x-httpd-ea-php56 .php .php5 .phtml
</IfModule>

<IfModule php5_module>
php_value date.timezone "America/New_York"
</IfModule>

<IfModule lsapi_module>
php_value date.timezone "America/New_York"
</IfModule>

Intente no utilizar palabras en mayúscula en caso de que la convención de mayúsculas y minúsculas normales pueda expresar lo que quiere decir.
shizhen

0

Hay dos opciones para resolver esto

Primero, cambie al archivo php.ini y coloque la zona horaria predeterminada

date.timezone = "America/New_York"

Una vez que haya configurado la zona horaria en php.ini reinicie el servidor

En segundo lugar, cambie la zona horaria de asignación de tiempo de ejecución según sus necesidades

date_default_timezone_set('America/New_York');

-1

En su página de conexión, coloque un código como este en date_default_timezone_set("Africa/Johannesburg");función de su ubicación actual.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.