Laravel Schedule:list produce un error de DateTimeZone.
- Versión de Laravel: 8.78.1
- Versión de PHP: 8.0.10
Descripción
Mientras creaba mi primer comando programado, al intentar enumerar mis programaciones con
php artisan schedule:list
lanza el siguiente error:
DateTime::setTimezone(): El argumento nº 1 ($timezone) debe ser del tipo DateTimeZone, se proporcionó null en vendor/laravel/framework/src/Illuminate/Console/Scheduling/ScheduleListCommand.php:43
cambiando mi comando a
php artisan schedule:list --timezone=Europe/London
obtengo:
DateTime::setTimezone(): El argumento nº 1 ($timezone) debe ser del tipo DateTimeZone, se proporcionó string en vendor/laravel/framework/src/Illuminate/Console/Scheduling/ScheduleListCommand.php:43
Pasos para reproducir:
Mi programación:
$schedule->command('email:expired-licences')->weekdays()->at('08:00');
Mi comando personalizado aún no hace nada.
Eventualmente encontré una solución si edito ScheduleListCommand.php
cambiando:
->setTimezone($this->option('timezone', config('app.timezone')))
a
->setTimezone(new DateTimeZone($this->option('timezone', config('app.timezone'))))
pero solamente si uso el interruptor –timezone=Europe/London (no estoy seguro si esto es requerido), si no, entonces el $this->option no parece aceptar config(‘app.timezone’) como valor predeterminado.
Incluso:
$schedule->command('route:list')->weekdays()->at('08:00');
no funciona en mi sistema – no estoy seguro de qué está pasando.
davy.ai
Solución al error DateTime::setTimezone en el comando schedule:list de Laravel
Si estás enfrentando el error DateTime::setTimezone al ejecutar el comando
php artisan schedule:list
en Laravel, aquí están los pasos para solucionarlo:Paso 1: Actualizar la versión de Laravel
Asegúrate de estar utilizando la última versión de Laravel. Actualmente, está disponible la versión 8.78.1 de Laravel. Puedes actualizar la versión de Laravel utilizando el siguiente comando:
Paso 2: Especificar la zona horaria
Cuando ejecutes el comando
php artisan schedule:list
, asegúrate de especificar la zona horaria utilizando la opción--timezone
. Por ejemplo:Paso 3: Editar el archivo ScheduleListCommand.php
Si los pasos anteriores no funcionan, puedes editar el archivo
ScheduleListCommand.php
. Este archivo se encuentra envendor/laravel/framework/src/Illuminate/Console/Scheduling/ScheduleListCommand.php
. En este archivo, cambia:por
Esto debería solucionar el error DateTime::setTimezone. Sin embargo, asegúrate de probar tus comandos programados para confirmar que estén funcionando correctamente.
Si aún tienes problemas, puedes intentar ejecutar el comando con una zona horaria diferente o verificar si hay conflictos con otras dependencias.