2017-04-11 74 views
0

我想找出不同時區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)給出了完美的結果。我錯過了什麼?

回答

2

你必須告訴碳哪個時區用於應該被解析的字符串。該的strtotime功能是不適合你正確的選擇,我認爲,因爲它總是從default_timezone_get()

例如consideres解析字符串要使用的時區:

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爲0.(關於不同時區的信息丟失)。

然而用碳DIFF表示的7200秒(= 2小時)的正確差是澳大利亞/悉尼和澳大利亞/珀斯

的真正區別默認所有的時間和日期時間的功能(包括碳)正在使用您的config/app.php文件中的時區變量中的值。

相關問題