"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>
usuario1852837
fuente

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 .

CtrlX
fuente
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 .

Babatunde Adeyemi
fuente
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');
}
Justis Matotoka
fuente
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)

Susan Taunton
fuente
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.

Chris
fuente
13

Siempre mantengo esta línea dentro de la raíz de codeigniter index.php. Para que mi código funcione en cualquier servidor

date_default_timezone_set('Asia/Dhaka');

Lista de zonas horarias admitidas aquí

Shaiful Islam
fuente
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.

John Linhart
fuente
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 :)

T0mmyKn1fe
fuente
5

Tuve que ponerlo entre comillas dobles.

date_default_timezone_set("America/Los_Angeles"); // default time zone
nochelact
fuente
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
Alexander Lindquist
fuente
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

M. Graham
fuente
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 
?>
Saurabh Chandra Patel
fuente
1
<? date_default_timezone_set('Europe/Istanbul'); ?>

Para php (o su ubicación).

Mehmet Şerif Çaçan
fuente
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 );
Elise Oertli
fuente
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.

Maruti C
fuente
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í

Latief Anwar
fuente
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í.

Don Law
fuente
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
Hora eterna
fuente
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.

Jeff Baker
fuente
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
Jin
fuente
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>
usuario3724176
fuente
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');
Nikunj K.
fuente
-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.

CuteDevIT
fuente