異なるタイムゾーンでの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);
_
diffInSeconds
を使用すると、2時間の差があり、ローカリゼーションは考慮されていないように見えますが、strtotime($tz) - strtotime($emitted)
は完璧な結果をもたらします。私が逃したことはありますか?
解析する文字列に使用するタイムゾーンをCarbonに指示する必要があります。 strtotime関数は、解析された文字列がdefault_timezone_get()のタイムゾーンを使用していると常に見なすため、適切な選択ではないと思います。
例えば:
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
$ emittedは「Australia/Sydney」を使用し、$ nowは「Australia/Perth」を使用することになっているため、通常の差分は明らかに間違っています。ただし、2つの変数の文字列表現はまったく同じであるため、差分は0です(異なるタイムゾーンに関する情報は失われます)。
ただし、Carbonとの差分は、オーストラリア/シドニーとオーストラリア/パースの実際の違いである7200秒(= 2時間)の正しい違いを示しています。
デフォルトでは、すべての日付および日時関数(Carbonを含む)は、config/app.phpファイルのtimezone変数の値を使用しています。