Saltar al contenido

Laravel Carbon cómo cambiar la zona horaria sin cambiar la hora

Posteriormente a investigar en diversos repositorios y páginas webs al concluir hallamos la respuesta que te enseñaremos aquí.

Solución:

Creo que lo que buscas es esto:

Carbon::createFromFormat('Y-m-d H:i:s', $some_date, 'UTC')
    ->setTimezone('America/Los_Angeles')

Primero, configura la zona horaria que tiene inicialmente, por lo que si almacena su fecha en la base de datos como UTC, luego configure la zona horaria predeterminada en UTC, luego use ->setTimeZone('Valid/Timezone') para hacer el cambio de lo que has tenido a la nueva zona horaria.

Una forma mejor y más sencilla sería:

$carbon = new Carbon('YYYY-MM-DD HH:II:SS', 'America/Los_Angeles');

NOTA: No olvide agregar la dependencia use CarbonCarbon;.

Utilizar el shiftTimezone() método en lugar de setTimezone().

si llamas setTimezone() en una instancia existente de Carbon, cambiará la fecha/hora a la nueva zona horaria, por ejemplo:

$datetime = Carbon::createFromFormat('Y-m-d H:i:s', '2020-09-15 23:45:00');
echo $datetime->toAtomString() . "n";
// 2020-09-15T23:45:00+00:00

$datetime->setTimezone('America/Los_Angeles');
echo $datetime . "n";
// 2020-09-15T16:45:00-07:00

Sin embargo, llamar shiftTimezone() en su lugar, establecerá la zona horaria sin cambiar la hora. Intentémoslo de nuevo desde el principio:

$datetime = Carbon::createFromFormat('Y-m-d H:i:s', '2020-09-15 23:45:00');
echo $datetime->toAtomString() . "n";
// 2020-09-15T23:45:00+00:00

$datetime->shiftTimezone('America/Los_Angeles');
echo $datetime->toAtomString() . "n";
// 2020-09-15T23:45:00-07:00

Por supuesto, también puede encadenar los métodos:

$datetime = Carbon::createFromFormat('Y-m-d H:i:s', '2020-09-15 23:45:00')
    ->shiftTimezone('America/Los_Angeles');
echo $datetime->toAtomString() . "n";
// 2020-09-15T23:45:00-07:00

También puede “cambiar” la zona horaria pasando la zona horaria como parte de la
settings array:

$datetime = Carbon::createFromFormat('Y-m-d H:i:s', '2020-09-15 23:45:00')
    ->settings(['timezone' => 'America/Los_Angeles']);
echo $datetime->toAtomString() . "n";
// 2020-09-15T23:45:00-07:00

Nos encantaría que puedieras dar visibilidad a esta reseña si lograste el éxito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *