Estoy tratando de obtener un nombre de zona horaria de un desplazamiento UTC en Laravel 5.3 usando Carbon. Código enumerado a continuación, cualquier ayuda sería muy apreciada.
/* current code iteration */ $utcOffset = -5; $timezone = Carbon::now($utcOffset)->timezone->getName(); echo $timezone; // Result: -05:00 // Expected Result: EST /* tried code */ $timezone = Carbon::now($utcOffset)->tzName; // Result: -05:00 /* What I used prior to Carbon */ $timezone = timezone_name_from_abbr(null, $utcOffset * 3600, TRUE); $dateTime = new DateTime(); $dateTime->setTimeZone(new DateTimeZone($timezone)); $timezone = $dateTime->format('T');'¿Qué me estoy perdiendo? me siento tonta..
Prefacio:
La respuesta aceptada funciona en la mayoría de los casos, pero como se menciona en el área de notas aportadas por el usuario de timezone_name_from_abbr() , hay problemas con el uso de la función, como devolver falso en lugar de la zona horaria real y devolver un identificador de zona horaria "histórico" (es decir, obsoleto) en lugar de el estándar actual para una ubicación dada. Los cuales siguen vigentes hasta la fecha.
Además, el código original devuelve el valor esperado, siempre que sepa que según los documentos de Carbon, si consulta https://carbon.nesbot.com/docs/#api-timezone
el nombre original de la zona horaria (puede ser el nombre de la región o una cadena de desplazamiento):
Una cosa más a tener en cuenta aquí es que no se considera confiable derivar la zona horaria del valor de compensación, ya que no tiene en cuenta la compensación de los períodos observados del horario de verano.
Entonces, todo esto para decir que derivar la zona horaria del desplazamiento no siempre es posible.
Responder:
Pero dado que el OP mencionó Carbon y la zona horaria en función de la compensación, según los documentos de Carbon a partir de ahora, la respuesta debería ser
$date = Carbon::now('-5'); echo $date->tzName;Intenté actualizar Carbon sin éxito y terminé usando la antigua clase de fecha y hora.
$timezone = timezone_name_from_abbr(null, $utcOffset * 3600, TRUE); $dateTime = new DateTime(); $dateTime->setTimeZone(new DateTimeZone($timezone)); $timezone = $dateTime->format('T');En un nuevo Carbon es la propiedad timezoneName ;
$now = Carbon::now(-5); echo $now->timezoneName; //or echo $now->timezone->getName();