Browse Source

DateTimeHelper::iso(): support \DateTime instances

Fabian Peter Hammerle 7 years ago
parent
commit
7e1df8afdc
2 changed files with 29 additions and 4 deletions
  1. 7 4
      DateTimeHelper.php
  2. 22 0
      tests/DateTimeHelperTest.php

+ 7 - 4
DateTimeHelper.php

@@ -114,7 +114,9 @@ class DateTimeHelper
         } elseif(sizeof(get_object_vars($i)) == 0) {
             throw new \InvalidArgumentException(
                 sprintf("given instance is invalid\n%s", print_r($i, true))
-                );
+            );
+        } elseif($i instanceof \DateTime) {
+            return $i->format(\DateTime::ATOM);
         } elseif($i instanceof \DateInterval) {
             $i = self::deinvertInterval($i);
             if($i->y < 0 || $i->m < 0 || $i->d < 0 || $i->h < 0 || $i->i < 0 || $i->s < 0) {
@@ -165,9 +167,10 @@ class DateTimeHelper
                     return sprintf('R%d/%s/%s', $repetitions, $start_iso, $interval_iso);
             }
         } else {
-            throw new \InvalidArgumentException(
-                sprintf("expected \\DateInterval or \\DatePeriod\n%s", print_r($i, true))
-                );
+            throw new \InvalidArgumentException(sprintf(
+                "expected \\DateTime, \\DateInterval or \\DatePeriod\n%s", 
+                print_r($i, true)
+                ));
         }
     }
 }

+ 22 - 0
tests/DateTimeHelperTest.php

@@ -317,6 +317,7 @@ class DateTimeHelperTest extends \PHPUnit_Framework_TestCase
     {
         return [
             [null, null],
+            [new DT('2016-09-16 21:13+02:00'), '2016-09-16T21:13:00+02:00'],
             [
                 new DP(
                     new DT('2016-08-05T14:50:14+08:00'),
@@ -388,6 +389,27 @@ class DateTimeHelperTest extends \PHPUnit_Framework_TestCase
         $this->assertSame($iso, DateTimeHelper::iso($interval));
     }
 
+    public function isoReinitDateTimeProvider()
+    {
+        return [
+            [new DT('2016-09-16')],
+            [new DT('2016-09-16 +02:00')],
+            [new DT('2016-09-16 -07:13')],
+            [new DT('2016-09-16 21:13')],
+            [new DT('2016-09-16 21:13+02:00')],
+            [new DT('2016-09-16 14:13-07:00')],
+            ];
+    }
+
+    /**
+     * @dataProvider isoReinitDateTimeProvider
+     */
+    public function testIsoReinitDateTime($dt)
+    {
+        $iso = DateTimeHelper::iso($dt);
+        $this->assertEquals($dt, new DT($iso));
+    }
+
     public function isoReinitIntervalProvider()
     {
         return [