Page MenuHomePhabricator

D16953.id.diff
No OneTemporary

D16953.id.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -135,6 +135,7 @@
'PhutilCalendarAbsoluteDateTime' => 'parser/calendar/data/PhutilCalendarAbsoluteDateTime.php',
'PhutilCalendarContainerNode' => 'parser/calendar/data/PhutilCalendarContainerNode.php',
'PhutilCalendarDateTime' => 'parser/calendar/data/PhutilCalendarDateTime.php',
+ 'PhutilCalendarDateTimeTestCase' => 'parser/calendar/data/__tests__/PhutilCalendarDateTimeTestCase.php',
'PhutilCalendarDocumentNode' => 'parser/calendar/data/PhutilCalendarDocumentNode.php',
'PhutilCalendarDuration' => 'parser/calendar/data/PhutilCalendarDuration.php',
'PhutilCalendarEventNode' => 'parser/calendar/data/PhutilCalendarEventNode.php',
@@ -732,6 +733,7 @@
'PhutilCalendarAbsoluteDateTime' => 'PhutilCalendarDateTime',
'PhutilCalendarContainerNode' => 'PhutilCalendarNode',
'PhutilCalendarDateTime' => 'Phobject',
+ 'PhutilCalendarDateTimeTestCase' => 'PhutilTestCase',
'PhutilCalendarDocumentNode' => 'PhutilCalendarContainerNode',
'PhutilCalendarDuration' => 'Phobject',
'PhutilCalendarEventNode' => 'PhutilCalendarContainerNode',
diff --git a/src/parser/calendar/data/PhutilCalendarDateTime.php b/src/parser/calendar/data/PhutilCalendarDateTime.php
--- a/src/parser/calendar/data/PhutilCalendarDateTime.php
+++ b/src/parser/calendar/data/PhutilCalendarDateTime.php
@@ -46,16 +46,9 @@
}
}
- public function newAbsoluteDateTime() {
- $epoch = $this->getEpoch();
- $timezone = nonempty($this->getTimezone(), 'UTC');
- return PhutilCalendarAbsoluteDateTime::newFromEpoch($epoch, $timezone)
- ->setIsAllDay($this->getIsAllDay())
- ->setViewerTimezone($this->getViewerTimezone());
- }
-
abstract public function newPHPDateTimeZone();
abstract public function newPHPDateTime();
+ abstract public function newAbsoluteDateTime();
abstract public function getTimezone();
}
diff --git a/src/parser/calendar/data/PhutilCalendarProxyDateTime.php b/src/parser/calendar/data/PhutilCalendarProxyDateTime.php
--- a/src/parser/calendar/data/PhutilCalendarProxyDateTime.php
+++ b/src/parser/calendar/data/PhutilCalendarProxyDateTime.php
@@ -14,6 +14,10 @@
return $this->proxy;
}
+ public function __clone() {
+ $this->proxy = clone $this->proxy;
+ }
+
public function setViewerTimezone($timezone) {
$this->getProxy()->setViewerTimezone($timezone);
return $this;
diff --git a/src/parser/calendar/data/PhutilCalendarRelativeDateTime.php b/src/parser/calendar/data/PhutilCalendarRelativeDateTime.php
--- a/src/parser/calendar/data/PhutilCalendarRelativeDateTime.php
+++ b/src/parser/calendar/data/PhutilCalendarRelativeDateTime.php
@@ -50,4 +50,22 @@
return $datetime;
}
+ public function newAbsoluteDateTime() {
+ $clone = clone $this;
+ $clone->setViewerTimezone(null);
+
+ $datetime = $clone->newPHPDateTime();
+
+ return id(new PhutilCalendarAbsoluteDateTime())
+ ->setYear((int)$datetime->format('Y'))
+ ->setMonth((int)$datetime->format('m'))
+ ->setDay((int)$datetime->format('d'))
+ ->setHour((int)$datetime->format('H'))
+ ->setMinute((int)$datetime->format('i'))
+ ->setSecond((int)$datetime->format('s'))
+ ->setIsAllDay($clone->getIsAllDay())
+ ->setTimezone($clone->getTimezone())
+ ->setViewerTimezone($this->getViewerTimezone());
+ }
+
}
diff --git a/src/parser/calendar/data/__tests__/PhutilCalendarDateTimeTestCase.php b/src/parser/calendar/data/__tests__/PhutilCalendarDateTimeTestCase.php
new file mode 100644
--- /dev/null
+++ b/src/parser/calendar/data/__tests__/PhutilCalendarDateTimeTestCase.php
@@ -0,0 +1,29 @@
+<?php
+
+final class PhutilCalendarDateTimeTestCase extends PhutilTestCase {
+
+ public function testDateTimeDuration() {
+ $start = PhutilCalendarAbsoluteDateTime::newFromISO8601('20161128T090000Z')
+ ->setTimezone('America/Los_Angeles')
+ ->setViewerTimezone('America/Chicago')
+ ->setIsAllDay(true);
+
+ $this->assertEqual(
+ '20161128',
+ $start->getISO8601());
+
+ $end = $start
+ ->newAbsoluteDateTime()
+ ->setHour(0)
+ ->setMinute(0)
+ ->setSecond(0)
+ ->newRelativeDateTime('P1D')
+ ->newAbsoluteDateTime();
+
+ $this->assertEqual(
+ '20161129',
+ $end->getISO8601());
+ }
+
+
+}

File Metadata

Mime Type
text/plain
Expires
Sat, Jul 26, 7:14 PM (1 w, 3 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
8580953
Default Alt Text
D16953.id.diff (4 KB)

Event Timeline