2011-10-26 47 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獲得DST的時間? – 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