2017-04-11 9 views
0

異なるタイムゾーンの2倍の違いを知りたい。 私のサーバーは、シドニーに基づいており、私はそれが違い、2時間を与えたdiffInSecondsを使用秒タイムゾーンに基づく炭素の2秒間の差

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); 

内の指定された時間と(パースに基づいて)、現在の時刻の差を見つけたいとローカリゼーションが取られていないように見えるさ考察 でもstrtotime($tz) - strtotime($emitted)であれば完璧な結果が得られます。私が見逃したことは?

答えて

2

解析する文字列にどのタイムゾーンが使用されているかCarbonに伝える必要があります。それは常に、例えばdefault_timezone_get()

からタイムゾーンを使用していると、解析された文字列をconsideresためのstrtotime関数は、私が思うあなたのための正しい選択ではありません:

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); 

はにつながります

diff from carbon->7200 
diff from Normal->0 

通常のdiffは明らかに$ emissionが 'Australia/Sydney'を使用し、$ nowが 'Australia/Perth'を使用することになっているため間違っています。しかし、2つの変数が全く同じ文字列表現を持つので、diffは0です(異なるタイムゾーンに関する情報は失われます)。デフォルトで

炭素とdiffはしかしオーストラリア/シドニー、オーストラリアとの間の実際の差である7200秒(= 2時間)の正確な差を示している/パース

すべての日付および日時機能(を含みます炭素)は、タイムゾーンの値をconfig/app.phpというファイルで使用しています。

関連する問題