2011-10-26 7 views
2

私はcakephp 1.2.6を使ってWebアプリケーションを作成しています。ユーザーが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

だけオフセットGMTをユーザーに尋ねることは十分ではありません理由です。彼のタイムゾーン*を彼に尋ねる必要があります。 – deceze

+0

ユーザーは、ドロップダウンから自分のタイムゾーンを選択します。しかし、DSTでGMT時間を取得するにはどうすればよいですか? – Shanaka

答えて

0

ユーザーのタイムゾーンを知っていたら、次のようにそのオフセットを得ることができます。

$est_tz = new DateTimeZone('America/New_York'); 
$d = new DateTime("now", $est_tz); 
$offset = $est_tz->getOffset($d); 
+0

お返事ありがとうございました。最後に、phpのdate( 'O')関数を使用して解決策を見つけることができました – Shanaka