Browse Source

DateTimeHelper periodToIso fixed: getDateInterval() is not available before php 5.6.5

Fabian Peter Hammerle 7 years ago
parent
commit
f7773c125b
1 changed files with 12 additions and 11 deletions
  1. 12 11
      DateTimeHelper.php

+ 12 - 11
DateTimeHelper.php

@@ -97,6 +97,10 @@ class DateTimeHelper
     {
         if(is_null($i)) {
             return null;
+        } elseif(sizeof(get_object_vars($i)) == 0) {
+            throw new \InvalidArgumentException(
+                sprintf("given interval is invalid\n%s", print_r($i, true))
+                );
         } else {
             $i = self::deinvertInterval($i);
             if($i->y < 0 || $i->m < 0 || $i->d < 0 || $i->h < 0 || $i->i < 0 || $i->s < 0) {
@@ -133,6 +137,12 @@ class DateTimeHelper
                 $repetitions++;
                 // printf("%d. %s\n", $repetitions, $dt->format(\DateTime::ATOM));
             }
+            // \DatePeriod::getStartDate() is available from php 5.6.5.
+            $start_iso = $p->start->format(\DateTime::ATOM);
+            // \DatePeriod::getDateInterval() is available from php 5.6.5.
+            // \DatePeriod::$interval returned an invalid \DatePeriod instance
+            // in php 7.0.8
+            $interval_iso = self::intervalToIso(get_object_vars($p)['interval']);
             switch($repetitions) {
                 case -1:
                     // no valid date within period
@@ -145,18 +155,9 @@ class DateTimeHelper
                         'given period does not contain any valid date'
                         );
                 case 0:
-                    return sprintf(
-                        '%s/%s',
-                        $p->start->format(\DateTime::ATOM),
-                        self::intervalToIso($p->getDateInterval())
-                        );
+                    return sprintf('%s/%s', $start_iso, $interval_iso);
                 default:
-                    return sprintf(
-                        'R%d/%s/%s',
-                        $repetitions,
-                        $p->start->format(\DateTime::ATOM),
-                        self::intervalToIso($p->getDateInterval())
-                        );
+                    return sprintf('R%d/%s/%s', $repetitions, $start_iso, $interval_iso);
             }
         }
     }