2011-10-26 43 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