es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for 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:

    composer update laravel/framework --with-dependencies
    

    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:

    php artisan schedule:list --timezone=Europe/London
    

    Paso 3: Editar el archivo ScheduleListCommand.php

    Si los pasos anteriores no funcionan, puedes editar el archivo ScheduleListCommand.php. Este archivo se encuentra en vendor/laravel/framework/src/Illuminate/Console/Scheduling/ScheduleListCommand.php. En este archivo, cambia:

    ->setTimezone($this->option('timezone', config('app.timezone')))
    

    por

    ->setTimezone(new DateTimeZone($this->option('timezone', config('app.timezone'))))
    

    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.

Comments are closed.