Quiero averiguar la diferencia entre 2 veces para la zona horaria diferente. Mi servidor está basado en Sydney y quiero encontrar la diferencia entre la hora dada y la hora actual (basada en Perth) en segundos
echo $tz = Carbon::now('Australia/Perth'); echo "<br>"; $local='2017-04-11 12:39:50'; echo $emitted = Carbon::parse($local); echo "<br>"; echo "diff from carbon->"; echo $diff = $tz->diffInSeconds($emitted); echo "<br> diff from Normal->"; echo $diff1 = strtotime($tz) - strtotime($emitted); Cuando usé diffInSeconds , dio una diferencia de 2 horas y parece que la localización no se tiene en cuenta, pero strtotime($tz) - strtotime($emitted) da un resultado perfecto. ¿Algo que me perdí?
Debe decirle a Carbon qué zona horaria se usa para la cadena que debe analizarse. Creo que la función strtotime no es la opción correcta para usted, porque siempre considera que las cadenas analizadas usan la zona horaria de default_timezone_get()
Por ejemplo:
echo $now = Carbon::now('Australia/Perth'); echo "<br>"; echo $emitted = Carbon::parse($now, 'Australia/Sydney'); echo "<br>"; echo "diff from carbon->"; echo $diff = $now->diffInSeconds($emitted); echo "<br> diff from Normal->"; echo $diff1 = strtotime($now) - strtotime($emitted);Daría como resultado:
diff from carbon->7200 diff from Normal->0La diferencia normal obviamente es incorrecta ya que se supone que $emited debe usar 'Australia/Sydney' y $now debe usar 'Australia/Perth'. Pero como las dos variables tienen exactamente la misma representación de cadena, la diferencia es 0. (Se pierde la información sobre las diferentes zonas horarias).
Sin embargo, la diferencia con Carbon muestra la diferencia correcta de 7200 segundos (= 2 horas), que es la diferencia real entre Australia/Sídney y Australia/Perth.
De forma predeterminada, todas las funciones de fecha y hora (incluido Carbon) usan el valor de la variable de zona horaria en su archivo config/app.php .