3 final class PhutilCalendarRelativeDateTime
4 extends PhutilCalendarProxyDateTime
{
8 public function setOrigin(PhutilCalendarDateTime
$origin) {
9 return $this->setProxy($origin);
12 public function getOrigin() {
13 return $this->getProxy();
16 public function setDuration(PhutilCalendarDuration
$duration) {
17 $this->duration
= $duration;
21 public function getDuration() {
22 return $this->duration
;
25 public function newPHPDateTime() {
26 $datetime = parent
::newPHPDateTime();
27 $duration = $this->getDuration();
29 if ($duration->getIsNegative()) {
36 'weeks' => $duration->getWeeks(),
37 'days' => $duration->getDays(),
38 'hours' => $duration->getHours(),
39 'minutes' => $duration->getMinutes(),
40 'seconds' => $duration->getSeconds(),
43 foreach ($map as $unit => $value) {
47 $datetime->modify("{$sign}{$value} {$unit}");
53 public function newAbsoluteDateTime() {
56 if ($clone->getTimezone()) {
57 $clone->setViewerTimezone(null);
60 $datetime = $clone->newPHPDateTime();
62 return id(new PhutilCalendarAbsoluteDateTime())
63 ->setYear((int)$datetime->format('Y'))
64 ->setMonth((int)$datetime->format('m'))
65 ->setDay((int)$datetime->format('d'))
66 ->setHour((int)$datetime->format('H'))
67 ->setMinute((int)$datetime->format('i'))
68 ->setSecond((int)$datetime->format('s'))
69 ->setIsAllDay($clone->getIsAllDay())
70 ->setTimezone($clone->getTimezone())
71 ->setViewerTimezone($this->getViewerTimezone());