kopia lustrzana https://github.com/friendica/SG-iCalendar
96 wiersze
2.4 KiB
PHP
Executable File
96 wiersze
2.4 KiB
PHP
Executable File
<?php // BUILD: Remove line
|
|
|
|
/**
|
|
* The wrapper for vtimezones. Stores the timezone-id and the setup for
|
|
* daylight savings and standard time.
|
|
*
|
|
* @package SG_iCalReader
|
|
* @author Morten Fangel (C) 2008
|
|
* @license http://creativecommons.org/licenses/by-sa/2.5/dk/deed.en_GB CC-BY-SA-DK
|
|
*/
|
|
class SG_iCal_VTimeZone {
|
|
protected $tzid;
|
|
protected $daylight;
|
|
protected $standard;
|
|
protected $cache = array();
|
|
|
|
/**
|
|
* Constructs a new SG_iCal_VTimeZone
|
|
*/
|
|
public function __construct( $data ) {
|
|
require_once dirname(__FILE__).'/../helpers/SG_iCal_Freq.php'; // BUILD: Remove line
|
|
|
|
$this->tzid = $data['tzid'];
|
|
$this->daylight = $data['daylight'];
|
|
$this->standard = $data['standard'];
|
|
}
|
|
|
|
/**
|
|
* Returns the timezone-id for this timezone. (Used to
|
|
* differentiate between different tzs in a calendar)
|
|
* @return string
|
|
*/
|
|
public function getTimeZoneId() {
|
|
return $this->tzid;
|
|
}
|
|
|
|
/**
|
|
* Returns the given offset in this timezone for the given
|
|
* timestamp. (eg +0200)
|
|
* @param int $ts
|
|
* @return string
|
|
*/
|
|
public function getOffset( $ts ) {
|
|
$act = $this->getActive($ts);
|
|
return $this->{$act}['tzoffsetto'];
|
|
}
|
|
|
|
/**
|
|
* Returns the timezone name for the given timestamp (eg CEST)
|
|
* @param int $ts
|
|
* @return string
|
|
*/
|
|
public function getTimeZoneName($ts) {
|
|
$act = $this->getActive($ts);
|
|
return $this->{$act}['tzname'];
|
|
}
|
|
|
|
/**
|
|
* Determines which of the daylight or standard is the active
|
|
* setting.
|
|
* The call is cached for a given timestamp, so a call to
|
|
* getOffset and getTimeZoneName with the same ts won't calculate
|
|
* the answer twice.
|
|
* @param int $ts
|
|
* @return string standard|daylight
|
|
*/
|
|
private function getActive( $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];
|
|
}
|
|
}
|
|
}
|