Horde_Mapi_Timezone::_getTransitions PHP Method

_getTransitions() protected static method

Get the transition data for moving from DST to STD time.
protected static _getTransitions ( DateTimeZone $timezone, Horde_Date $date ) : array
$timezone DateTimeZone The timezone to get the transition for
$date Horde_Date The date to start from. Really only the year we are interested in is needed.
return array An array containing the the STD and DST transitions
    protected static function _getTransitions(DateTimeZone $timezone, Horde_Date $date)
    {
        $std = $dst = array();
        $transitions = $timezone->getTransitions(mktime(0, 0, 0, 12, 1, $date->year - 1), mktime(24, 0, 0, 12, 31, $date->year));
        if ($transitions === false) {
            return array();
        }
        foreach ($transitions as $i => $transition) {
            try {
                $d = new Horde_Date($transition['time']);
                $d->setTimezone('UTC');
            } catch (Exception $e) {
                continue;
            }
            if ($d->format('Y') == $date->format('Y') && isset($transitions[$i + 1])) {
                $next = new Horde_Date($transitions[$i + 1]['ts']);
                if ($d->format('Y') == $next->format('Y')) {
                    $dst = $transition['isdst'] ? $transition : $transitions[$i + 1];
                    $std = $transition['isdst'] ? $transitions[$i + 1] : $transition;
                } else {
                    $dst = $transition['isdst'] ? $transition : null;
                    $std = $transition['isdst'] ? null : $transition;
                }
                break;
            } elseif ($i == count($transitions) - 1) {
                $std = $transition;
            }
        }
        return array($std, $dst);
    }