Remove all "FileHasObject" edge reads and writes
[phabricator.git] / src / applications / calendar / parser / data / PhutilCalendarRelativeDateTime.php
blob15c5dc231c50304214323869a6f26a6212ef8a79
1 <?php
3 final class PhutilCalendarRelativeDateTime
4 extends PhutilCalendarProxyDateTime {
6 private $duration;
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;
18 return $this;
21 public function getDuration() {
22 return $this->duration;
25 public function newPHPDateTime() {
26 $datetime = parent::newPHPDateTime();
27 $duration = $this->getDuration();
29 if ($duration->getIsNegative()) {
30 $sign = '-';
31 } else {
32 $sign = '+';
35 $map = array(
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) {
44 if (!$value) {
45 continue;
47 $datetime->modify("{$sign}{$value} {$unit}");
50 return $datetime;
53 public function newAbsoluteDateTime() {
54 $clone = clone $this;
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());