夏令时(DST)(单位:CakePHP)

夏令时(DST)(单位:CakePHP),php,cakephp,cakephp-1.2,Php,Cakephp,Cakephp 1.2,我正在使用CakePHP1.2.6创建一个web应用程序。我需要一个功能来节省用户以GMT格式输入的时间。我用下面的方法来做这个 function convertDateTimeToGMT($dateTimeStr,$fromTimeZone, $format = 'Y-m-d H:i:s') { if (empty($dateTimeStr)) return $dateTimeStr; else if (empty($fromTimeZone)) return

我正在使用CakePHP1.2.6创建一个web应用程序。我需要一个功能来节省用户以GMT格式输入的时间。我用下面的方法来做这个

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'是我在代码中调用以传递日期时间和时区的方法。我有一个时区组合框,如果用户选择时区为Pacific,它将传递-8作为$fromTimeZone的值。但由于DST,这是可以改变的


那么cakephp中是否有任何方法可以自动找到最新的时区值并将时间转换为GMT?

一旦知道用户的时区,就可以按如下方式获得其偏移量:

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

知道用户的时区后,可以按如下方式获得其偏移量:

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

这就是为什么仅仅向用户询问GMT偏移量是不够的。您需要询问他的时区。用户从下拉列表中选择他/她的时区。但是我怎样才能用DST获得GMT时间呢?这就是为什么仅仅向用户询问GMT偏移量是不够的。您需要询问他的时区。用户从下拉列表中选择他/她的时区。但是我怎样才能从中获得GMT时间和DST时间呢?谢谢大家的回答。最后,我在phpThanks中使用date'O'函数找到了解决方案,感谢大家的回答。最后,我使用php中的date'O'函数找到了解决方案