Browse Source

[ZF-7745] Zend_Date:

- fixed setting day of year for leapyear when date is only initiated partitially

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@17944 44c647ce-9c0f-0410-b52a-842ac1e357ba
thomas 16 years ago
parent
commit
21c4f8d5e9
2 changed files with 25 additions and 2 deletions
  1. 8 2
      library/Zend/Date.php
  2. 17 0
      tests/Zend/DateTest.php

+ 8 - 2
library/Zend/Date.php

@@ -1513,8 +1513,14 @@ class Zend_Date extends Zend_Date_DateObject
 
             case self::DAY_OF_YEAR:
                 if (is_numeric($date)) {
-                    return $this->_assign($calc, $this->mktime(0, 0, 0, 1, 1 + $date, 1970, true),
-                                                 $this->mktime(0, 0, 0, $month, 1 + $day, 1970, true), $hour);
+                    if (($calc == 'add') || ($calc == 'sub')) {
+                        $year = 1970;
+                        ++$date;
+                        ++$day;
+                    }
+
+                    return $this->_assign($calc, $this->mktime(0, 0, 0, 1, $date, $year, true),
+                                                 $this->mktime(0, 0, 0, $month, $day, $year, true), $hour);
                 }
                 require_once 'Zend/Date/Exception.php';
                 throw new Zend_Date_Exception("invalid date ($date) operand, day expected", $date);

+ 17 - 0
tests/Zend/DateTest.php

@@ -5475,6 +5475,23 @@ class Zend_DateTest extends PHPUnit_Framework_TestCase
         );
         $this->assertEquals('2008-03-01T00:00:00+05:00', $date->getIso());
     }
+
+    /**
+     * @ZF-7745
+     *
+     */
+    public function testSetFirstDayOfLeapYear()
+    {
+        $date = new Zend_Date(2008, Zend_Date::YEAR);
+        $date->setDayOfYear(1);
+        $this->assertEquals('2008-01-01T00:00:00+05:00', $date->getIso());
+
+        $date->setDayOfYear(61);
+        $this->assertEquals('2008-03-01T00:00:00+05:00', $date->getIso());
+
+        $date->setDayOfYear(62);
+        $this->assertEquals('2008-03-02T00:00:00+05:00', $date->getIso());
+    }
 }
 
 class Zend_Date_TestHelper extends Zend_Date