2017-04-11 6 views
0

다른 시간대의 차이를 두 번 알아 내고 싶습니다. 내 서버는 시드니를 기반으로하고 나는 그것이 차이가 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에 알려줘야합니다.

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

이 초래 : 항상 구문 분석 된 문자열이 default_timezone_get() 예를 들어

에서 시간대를 사용하는 것으로 consideres 때문에 한 strtotime 기능은, 내가 생각하는 당신을위한 올바른 선택이 아니다

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

보통 $ diff는 'Australia/Sydney'를 사용하고 $는 'Australia/Perth'를 사용해야하기 때문에 분명히 잘못되었습니다. 그러나 두 변수가 똑같은 문자열 표현을 가지고 있기 때문에 diff는 0입니다 (다른 시간대에 대한 정보는 손실됩니다). 기본적 호주/시드니, 호주/퍼스

간의 실제 차이는 모든 날짜 및 날짜 - 시간 함수 (포함하다

탄소와 DIFF 그러나 7200 초 (= 2 시간)의 정확한 차이를 나타낸다 탄소)은 시간대 변수의 값을 config/app.php 개 변수에 사용하고 있습니다.