Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

443
Views
Cambios en el valor de la marca de tiempo de Laravel y MySQL con la configuración de mysqld

Tengo MySQL y Laravel en mi servidor local, con configuración predeterminada y mi zona horaria es GMT+2.

Prueba 1

No toco nada en la configuración de MySQL y pruebo algo en mi base de datos:

 SELECT CURRENT_TIMESTAMP, UTC_TIMESTAMP;

Resultados:

 CURRENT_TIMESTAMP UTC_TIMESTAMP 2020-06-09 16:34:58 2020-06-09 14:34:58

Ahora, quiero solicitar este raw en Laravel:

 id device_id lat lng alt at created_at updated_at 1 10 10.000000 10.000000 NULL NULL 2020-06-09 16:21:55 2020-06-09 16:21:55

Aquí está mi prueba usando php artisan tinker :

PRUEBA 1

Muestra las 16:34 en UTC (GMT+0).

prueba 2

Ahora trato de cambiar la configuración de mysql (en /etc/mysql/mysql.conf.d/mysqld.cnf ), y establezco esta configuración:

 default_time_zone='+00:00'

Reinicio mi servidor:

 sudo service mysql restart

Y luego vuelvo a intentar la misma prueba que la anterior:

 CURRENT_TIMESTAMP UTC_TIMESTAMP 2020-06-09 14:42:46 2020-06-09 14:42:46

Ahora, el raw muestra algo diferente (de 16 a 14 horas):

 id device_id lat lng alt at created_at updated_at 1 10 10.000000 10.000000 NULL NULL 2020-06-09 14:21:55 2020-06-09 14:21:55

Y en Laravel:

ingrese la descripción de la imagen aquí

Muestra las 14:34 en UTC (GMT+0).

El problema

Esperaba que Laravel/Carbon (o quizás MySQL) entendiera que la fecha sigue siendo la misma pero parece que no.
Además, con la configuración de la Test 1 , cuando una columna por defecto es CURRENT_TIMESTAMP , Laravel lo entiende como UTC, lo cual es incorrecto porque MySQL lo inicializará como GMT+2 (en mi caso).

Por ejemplo, cuando ejecuto una consulta INSERT INTO en una tabla (fuera de Laravel, de Adminer o PhpMyAdmin) que tiene una columna de marca de tiempo DEFAULT a CURRENT_TIMESTAMP , MySQL insertará "18:00" como GMT+2 mientras que Laravel leerá "18 :00" como GMT+0.
¿Cómo puedo evitar este problema? ¿Es correcto configurar el parámetro mysqld como en Test 2 ?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Convertir la zona horaria de sus fechas de su servidor de base de datos a su servidor de aplicaciones es una mala idea. Deberían funcionar con la misma zona horaria, porque las conversiones de zona horaria no son conversiones 1:1 debido a los cambios de horario de verano. Su entorno local/de desarrollo debe estar lo más cerca posible de sus entornos de producción. Y sería mejor que todas las herramientas (tanto DB como Laravel) estuvieran en GMT+00:00 (= "UTC" en la configuración de Laravel), por lo que se basa en el estándar UTC y podrá reutilizar/intercambiar fácilmente sus datos ( o una parte de él) a otro servicio/usuario con cualquier otra zona horaria ahora o más tarde, las zonas horarias como "GMT+2" deberían aparecer solo cuando desee mostrar una fecha a un usuario que sabe que está en esta zona horaria, no para almacenamiento .

over 4 years ago · Santiago Trujillo Report

0

Debe cambiar la zona horaria en la configuración de PHP.

En su archivo php.ini, cambie este valor - date.timezone

o puede configurar la zona horaria en la configuración de Laravel.

en your- app/config/app.php - 'timezone' => 'UTC' cambie este valor.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!