Explorar o código

ZF-11296 (cloned from: ZF-10949 ). Implemented some obsolete date parsing RFC2822

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@24107 44c647ce-9c0f-0410-b52a-842ac1e357ba
freak %!s(int64=14) %!d(string=hai) anos
pai
achega
5a13791e21
Modificáronse 2 ficheiros con 22 adicións e 1 borrados
  1. 4 1
      library/Zend/Date.php
  2. 18 0
      tests/Zend/Date/DateObjectTest.php

+ 4 - 1
library/Zend/Date.php

@@ -2107,7 +2107,10 @@ class Zend_Date extends Zend_Date_DateObject
                 break;
 
             case self::RFC_2822:
-                $result = preg_match('/^\w{3},\s(\d{1,2})\s(\w{3})\s(\d{4})\s(\d{2}):(\d{2}):{0,1}(\d{0,2})\s([+-]{1}\d{4})$/', $date, $match);
+                 $result = preg_match('/^\w{3},\s(\d{1,2})\s(\w{3})\s(\d{4})\s'
+                                    . '(\d{2}):(\d{2}):{0,1}(\d{0,2})\s([+-]'
+                                    . '{1}\d{4}|\w{1,20})$/', $date, $match);
+
                 if (!$result) {
                     require_once 'Zend/Date/Exception.php';
                     throw new Zend_Date_Exception("no RFC 2822 format ($date)", 0, null, $date);

+ 18 - 0
tests/Zend/Date/DateObjectTest.php

@@ -539,6 +539,24 @@ class Zend_Date_DateObjectTest extends PHPUnit_Framework_TestCase
         $this->assertTrue(($diff < 2), "Zend_Date_DateObject->_getTime() returned a significantly "
             . "different timestamp than expected: $diff seconds");
     }
+    
+    /**
+     * Test for RFC 2822's Obsolete Date and Time (paragraph 4.3)
+     * 
+     * @see ZF-11296
+     */
+    public function test_obsRfc2822()
+    {
+        $date = new Zend_Date();
+        /* Obsolete timezones */
+        $this->assertTrue($date->set("Mon, 15 Aug 2005 15:52:01 +0000", Zend_Date::RFC_2822) instanceof Zend_Date);
+        $this->assertTrue($date->set("Mon, 15 Aug 2005 15:52:01 UT", Zend_Date::RFC_2822) instanceof Zend_Date);
+        $this->assertTrue($date->set("Mon, 15 Aug 2005 15:52:01 GMT", Zend_Date::RFC_2822) instanceof Zend_Date);
+        $this->assertTrue($date->set("Mon, 15 Aug 2005 15:52:01 EST", Zend_Date::RFC_2822) instanceof Zend_Date);
+        $this->assertTrue($date->set("Mon, 15 Aug 2005 15:52:01 I", Zend_Date::RFC_2822) instanceof Zend_Date);
+        $this->assertTrue($date->set("Mon, 15 Aug 2005 15:52:01 Z", Zend_Date::RFC_2822) instanceof Zend_Date);
+    }
+    
 }
 
 class Zend_Date_DateObjectTestHelper extends Zend_Date