Browse Source

added \DateTimeHelper::parseGetStart()

Fabian Peter Hammerle 7 years ago
parent
commit
75626d451e
2 changed files with 61 additions and 2 deletions
  1. 16 2
      DateTimeHelper.php
  2. 45 0
      tests/DateTimeHelperTest.php

+ 16 - 2
DateTimeHelper.php

@@ -6,7 +6,7 @@ class DateTimeHelper
 {
     /**
      * @param integer|null $timestamp unix timestamp
-     * @return DateTime|null
+     * @return \DateTime|null
      */
     public static function timestampToDateTime($timestamp)
     {
@@ -23,7 +23,7 @@ class DateTimeHelper
 
     /**
      * @param string|null $text
-     * @return DatePeriod|null
+     * @return \DatePeriod|null
      */
     public static function parse($text)
     {
@@ -58,4 +58,18 @@ class DateTimeHelper
             }
         }
     }
+
+    /**
+     * @param string|null $text
+     * @return \DateTime|null
+     */
+    public static function parseGetStart($text)
+    {
+        $period = self::parse($text);
+        if($period) {
+            return $period->start;
+        } else {
+            return null;
+        }
+    }
 }

+ 45 - 0
tests/DateTimeHelperTest.php

@@ -121,4 +121,49 @@ class DateTimeHelperTest extends \PHPUnit_Framework_TestCase
     {
         DateTimeHelper::parse($text);
     }
+
+    public function parseGetStartProvider()
+    {
+        return [
+            [null, 'UTC', null],
+            [null, 'US/Pacific', null],
+            ['2016-08-02', 'UTC', new \DateTime('2016-08-02T00:00:00Z')],
+            ['2016-08-02', 'Europe/Vienna', new \DateTime('2016-08-02T00:00:00+02:00')],
+            ['2016-08-02', 'Europe/Vienna', new \DateTime('2016-08-01T22:00:00Z')],
+            ['2016-08-02 15:52:13', 'UTC',  new \DateTime('2016-08-02T15:52:13Z')],
+            ['2016-08-02 15:52:13', 'Europe/Vienna',  new \DateTime('2016-08-02T15:52:13+02:00')],
+            ['2016-08-02 15:52:13', 'Europe/Vienna',  new \DateTime('2016-08-02T13:52:13Z')],
+            ['2016-08-02T15:52:13', 'US/Pacific',  new \DateTime('2016-08-02T15:52:13-07:00')],
+            ];
+    }
+
+    /**
+     * @dataProvider parseGetStartProvider
+     */
+    public function testParseGetStart($text, $timezone, $expected)
+    {
+        date_default_timezone_set($timezone);
+        $this->assertEquals($expected, DateTimeHelper::parseGetStart($text));
+    }
+
+    public function parseGetStartInvalidArgumentProvider()
+    {
+        return [
+            ['     '],
+            [''],
+            ['2016--12'],
+            ['2016-10-12 08:20#01'],
+            [1],
+            [false],
+            ];
+    }
+
+    /**
+     * @dataProvider parseGetStartInvalidArgumentProvider
+     * @expectedException \InvalidArgumentException
+     */
+    public function testParseGetStartInvalidArgument($text)
+    {
+        DateTimeHelper::parseGetStart($text);
+    }
 }