use PHP 5.2+ DateTimeZone objects if available to get active daylight state

Signed-off-by: Tanguy Pruvot <tanguy.pruvot@gmail.com>
master
Tanguy Pruvot 2010-10-29 02:57:37 +02:00
rodzic e0d25803d2
commit 8b5be46c25
1 zmienionych plików z 24 dodań i 13 usunięć

Wyświetl plik

@ -65,20 +65,31 @@ class SG_iCal_VTimeZone {
* @return string standard|daylight
*/
private function getActive( $ts ) {
if( isset($this->cache[$ts]) ) {
if (class_exists('DateTimeZone')) {
//PHP >= 5.2
$tz = new DateTimeZone( $this->tzid );
$date = new DateTime("@$ts", $tz);
return ($date->format('%I') == 1) ? 'daylight' : 'standard';
} else {
if( isset($this->cache[$ts]) ) {
return $this->cache[$ts];
}
$daylight_freq = new SG_iCal_Freq($this->daylight['rrule'], strtotime($this->daylight['dtstart']));
$standard_freq = new SG_iCal_Freq($this->standard['rrule'], strtotime($this->standard['dtstart']));
$last_standard = $standard_freq->previousOccurrence($ts);
$last_dst = $daylight_freq->previousOccurrence($ts);
if( $last_dst > $last_standard ) {
$this->cache[$ts] = 'daylight';
} else {
$this->cache[$ts] = 'standard';
}
return $this->cache[$ts];
}
$daylight_freq = new SG_iCal_Freq($this->daylight['rrule'], strtotime($this->daylight['dtstart']));
$standard_freq = new SG_iCal_Freq($this->standard['rrule'], strtotime($this->standard['dtstart']));
$last_standard = $standard_freq->previousOccurrence($ts);
$last_dst = $daylight_freq->previousOccurrence($ts);
if( $last_dst > $last_standard ) {
$this->cache[$ts] = 'daylight';
} else {
$this->cache[$ts] = 'standard';
}
return $this->cache[$ts];
}
}