2011-10-26 4 views
2

cakephp 1.2.6을 사용하여 웹 응용 프로그램을 만들고 있습니다. 사용자가 GMT 형식으로 입력 한 시간을 절약하는 데 필요한 기능이 있습니다. 나는 이것을하기 위해 아래의 방법을 사용하고있다. CakePHP의 일광 절약 시간 (DST)

function convertDateTimeToGMT($dateTimeStr,$fromTimeZone, $format = 'Y-m-d H:i:s') { 
    if (empty($dateTimeStr)) 
    return $dateTimeStr; 
    else if (empty($fromTimeZone)) 
    return $dateTimeStr; 
    else { 
     // Inverse the + or minus. Decimal value should be passed 
     //$timeHelper = new TimeHelper(); 
     $newTZ = -1 * $fromTimeZone; 
     return $this->format($format, $dateTimeStr, null, $newTZ) ; 
    } 
} 


function format($format = 'd-m-Y', $date, $invalid = false, $userOffset = null) { 
    $date = $this->fromString($date, $userOffset); 
    if ($date === false && $invalid !== false) { 
     return $invalid; 
    } 
    return date($format, $date); 
} 

function fromString($dateString, $userOffset = null) { 
    if (empty($dateString)) { 
     return false; 
    } 
    if (is_int($dateString) || is_numeric($dateString)) { 
     $date = intval($dateString); 
    } else { 
     $date = strtotime($dateString); 
    } 
    if ($userOffset !== null) { 
     return $this->convert($date, $userOffset); 
    } 
    return $date; 
} 

function convert($serverTime, $userOffset) { 
    $serverOffset = $this->serverOffset(); 
    $gmtTime = $serverTime - $serverOffset; 
    $userTime = $gmtTime + $userOffset * (60*60); 
    return $userTime; 
} 

convertDateTimeToGMT($dateTimeStr,$fromTimeZone, $format = 'Y-m-d H:i:s')

내가 날짜 시간 및 시간대를 전달하는 내 코드에 전화 드렸습니다 방법입니다. 나는 시간대의 콤보 박스를 가지고 있는데 사용자가 시간대를 "태평양"으로 선택하면 -8을 $fromTimeZone의 값으로 전달합니다. 그러나 DST 때문에이 변경 될 수 있습니다.

그래서 cakephp에서 최신 표준 시간대 값을 자동으로 찾고 GMT로 변환하는 방법이 있습니까?

+0

오프셋을 충분하지 않습니다. 당신은 그에게 * 시간대를 물어볼 필요가 있습니다. – deceze

+0

사용자는 드롭 다운에서 자신의 시간대를 선택합니다. 그러나 DST로 GMT 시간을 얻으려면 어떻게해야합니까? – Shanaka

답변

0

당신은 다음과 같이이 오프셋받을 수있는 사용자의 시간대를 알고 있으면 :

에만 GMT에 대한 사용자 요청 이유
$est_tz = new DateTimeZone('America/New_York'); 
$d = new DateTime("now", $est_tz); 
$offset = $est_tz->getOffset($d); 
+0

답변 해 주셔서 감사합니다. 마지막으로 PHP에서 date ('O') 함수를 사용하여 솔루션을 찾을 수있었습니다. – Shanaka