Kaynağa Gözat

Merge pull request #450 from bskendig/master

[Zend_Date] Add support for time strings without seconds.
Frank Brückner 11 yıl önce
ebeveyn
işleme
5eeb2619bb
2 değiştirilmiş dosya ile 21 ekleme ve 0 silme
  1. 12 0
      library/Zend/Date.php
  2. 9 0
      tests/Zend/DateTest.php

+ 12 - 0
library/Zend/Date.php

@@ -2067,9 +2067,18 @@ class Zend_Date extends Zend_Date_DateObject
                 }
                 // (T)hh:mm:ss
                 preg_match('/[T,\s]{0,1}(\d{2}):(\d{2}):(\d{2})/', $tmpdate, $timematch);
+                // (T)hhmmss
                 if (empty($timematch)) {
                     preg_match('/[T,\s]{0,1}(\d{2})(\d{2})(\d{2})/', $tmpdate, $timematch);
                 }
+                // (T)hh:mm
+                if (empty($timematch)) {
+                    preg_match('/[T,\s]{0,1}(\d{2}):(\d{2})/', $tmpdate, $timematch);
+                }
+                // (T)hhmm
+                if (empty($timematch)) {
+                    preg_match('/[T,\s]{0,1}(\d{2})(\d{2})/', $tmpdate, $timematch);
+                }
                 if (empty($datematch) and empty($timematch)) {
                     require_once 'Zend/Date/Exception.php';
                     throw new Zend_Date_Exception("unsupported ISO8601 format ($date)", 0, null, $date);
@@ -2093,6 +2102,9 @@ class Zend_Date extends Zend_Date_DateObject
                     $timematch[2] = 0;
                     $timematch[3] = 0;
                 }
+                if (!isset($timematch[3])) {
+                    $timematch[3] = 0;
+                }
 
                 if (($calc == 'set') || ($calc == 'cmp')) {
                     --$datematch[2];

+ 9 - 0
tests/Zend/DateTest.php

@@ -1955,6 +1955,15 @@ class Zend_DateTest extends PHPUnit_Framework_TestCase
         $date->set('20071020T20:10:30', Zend_Date::ISO_8601);
         $this->assertSame('2007-10-20T20:10:30+05:00', $date->get(Zend_Date::W3C));
         $date->set(1234567890);
+        $date->set('20071020T10:30', Zend_Date::ISO_8601);
+        $this->assertSame('2007-10-20T10:30:00+05:00', $date->get(Zend_Date::W3C));
+        $date->set(1234567890);
+        $date->set('20071020T103000', Zend_Date::ISO_8601);
+        $this->assertSame('2007-10-20T10:30:00+05:00', $date->get(Zend_Date::W3C));
+        $date->set(1234567890);
+        $date->set('20071020T1020', Zend_Date::ISO_8601);
+        $this->assertSame('2007-10-20T10:20:00+05:00', $date->get(Zend_Date::W3C));
+        $date->set(1234567890);
         $date->set('-00071020T20:10:30', Zend_Date::ISO_8601);
         $this->assertSame('-7-10-20T20:10:30+00:00', $date->get(Zend_Date::W3C));
         $date->setTimezone('Indian/Maldives');