Changeset View
Changeset View
Standalone View
Standalone View
src/parser/calendar/data/PhutilCalendarAbsoluteDateTime.php
Show First 20 Lines • Show All 219 Lines • ▼ Show 20 Lines | public function setTimezone($timezone) { | ||||
return $this; | return $this; | ||||
} | } | ||||
public function getTimezone() { | public function getTimezone() { | ||||
return $this->timezone; | return $this->timezone; | ||||
} | } | ||||
private function getEffectiveTimezone() { | private function getEffectiveTimezone() { | ||||
$zone = $this->getTimezone(); | $date_timezone = $this->getTimezone(); | ||||
if ($zone !== null) { | $viewer_timezone = $this->getViewerTimezone(); | ||||
return $zone; | |||||
} | // Because all-day events are always "floating", the effective timezone | ||||
// is the viewer timezone if it is available. Otherwise, we'll return a | |||||
// DateTime object with the correct values, but it will be incorrectly | |||||
// adjusted forward or backward to the viewer's zone later. | |||||
$zone = $this->getViewerTimezone(); | $zones = array(); | ||||
if ($zone !== null) { | if ($this->getIsAllDay()) { | ||||
return $zone; | $zones[] = $viewer_timezone; | ||||
$zones[] = $date_timezone; | |||||
} else { | |||||
$zones[] = $date_timezone; | |||||
$zones[] = $viewer_timezone; | |||||
} | } | ||||
$zones = array_filter($zones); | |||||
if (!$zones) { | |||||
throw new Exception( | throw new Exception( | ||||
pht( | pht( | ||||
'Datetime has no timezone or viewer timezone.')); | 'Datetime has no timezone or viewer timezone.')); | ||||
} | } | ||||
return head($zones); | |||||
} | |||||
public function newPHPDateTimeZone() { | public function newPHPDateTimeZone() { | ||||
$zone = $this->getEffectiveTimezone(); | $zone = $this->getEffectiveTimezone(); | ||||
return new DateTimeZone($zone); | return new DateTimeZone($zone); | ||||
} | } | ||||
public function newPHPDateTime() { | public function newPHPDateTime() { | ||||
$zone = $this->newPHPDateTimeZone(); | $zone = $this->newPHPDateTimeZone(); | ||||
Show All 25 Lines |