문제

현재 (시스템) 시간대에 비해 PHP에서 UTC 오프셋을 얻는 가장 쉬운 방법은 무엇입니까?

도움이 되었습니까?

해결책

  date('Z');

UTC 오프셋을 몇 초 만에 반환합니다.

다른 팁

// will output something like +02:00 or -04:00
echo date('P');

timezone_offset_get()

$this_tz_str = date_default_timezone_get();
$this_tz = new DateTimeZone($this_tz_str);
$now = new DateTime("now", $this_tz);
$offset = $this_tz->getOffset($now);

테스트되지 않았지만 작동해야합니다

나는 오스카가 한 일에 대해 약간 수정 된 버전을했다.

date_default_timezone_set('America/New_York');
$utc_offset =  date('Z') / 3600;

이것은 내 시간대에서 EST에서 UTC로 오프셋을 몇 시간 만에 제공했습니다.

$ utc_offset의 값은 -4입니다.

간단히 할 수 있습니다.

//Object oriented style
function getUTCOffset_OOP($timezone)
{
    $current   = timezone_open($timezone);
    $utcTime  = new \DateTime('now', new \DateTimeZone('UTC'));
    $offsetInSecs =  $current->getOffset($utcTime);
    $hoursAndSec = gmdate('H:i', abs($offsetInSecs));
    return stripos($offsetInSecs, '-') === false ? "+{$hoursAndSec}" : "-{$hoursAndSec}";
}

//Procedural style
function getUTCOffset($timezone)
{
    $current   = timezone_open($timezone);
    $utcTime  = new \DateTime('now', new \DateTimeZone('UTC'));
    $offsetInSecs =  timezone_offset_get( $current, $utcTime);
    $hoursAndSec = gmdate('H:i', abs($offsetInSecs));
    return stripos($offsetInSecs, '-') === false ? "+{$hoursAndSec}" : "-{$hoursAndSec}";
}


$timezone = 'America/Mexico_City';

echo "Procedural style<br>";
echo getUTCOffset($timezone); //-06:00
echo "<br>";
echo "(UTC " . getUTCOffset($timezone) . ") " . $timezone; // (UTC -06:00) America/Mexico_City
echo "<br>--------------<br>";
echo "Object oriented style<br>";
echo getUTCOffset_OOP($timezone); //-06:00
echo "<br>";
echo "(UTC " . getUTCOffset_OOP($timezone) . ") " . $timezone; // (UTC -06:00) America/Mexico_City

이것은 동일한 JavaScript입니다 date.getTimezoneOffset() 기능:

<?php
echo date('Z')/-60;
?>

date("Z") 사용자의 기계 시간대가 아닌 서버 타임 존에 비해 UTC 오프셋을 반환합니다. 사용자의 기계 시간대를 얻으려면 JavaScript를 사용할 수 있습니다. getTimezoneOffset() UTC 시간과 현지 시간 간의 시차를 몇 분 안에 반환하는 함수.

<script type="text/javascript">
    d = new Date();
    window.location.href = "page.php?offset=" + d.getTimezoneOffset();
</script>

그리고에서 page.php PHP 코드를 보유하면 해당 오프셋 값으로 원하는대로 할 수 있습니다. 또는 다른 페이지로 리디렉션하는 대신 필요에 따라 AJAX를 통해 OFFSET 값을 PHP 스크립트로 보낼 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top