Летнее время (DST) в CakePHP - PullRequest
       38

Летнее время (DST) в CakePHP

2 голосов
/ 26 октября 2011

Я создаю веб-приложение с использованием cakephp 1.2.6.Есть функция, которая мне нужна, чтобы сэкономить время, которое пользователь вводит в формате 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') - это метод, который я вызываю в своем коде для передачи даты, времени и часового пояса.У меня есть поле со списком часовых поясов, и если пользователь выберет часовой пояс как «Тихий», он передаст -8 как значение $fromTimeZone.Но из-за перехода на летнее время это можно изменить.

Так есть ли в cakephp какой-либо способ автоматически найти актуальные значения часового пояса и преобразовать время в GMT?

1 Ответ

0 голосов
/ 29 октября 2011

Когда вы знаете часовой пояс пользователя, вы можете получить его смещение следующим образом:

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