Zend_Date addMonth添加更多参数

时间:2014-10-01 21:05:20

标签: php date zend-framework zend-date

所以,我有以下代码:

$dateBase = $amount->getDate();
for ($i = 1; $i <= 3; $i++) {
    $installment = new Installment();
    if ($i == 1) {
        //do stuff
    } else {
        var_dump('1-'.$dateBase->toString());
        $dateBase->addMonth(1);
        var_dump('2-'.$dateBase->toString());
    }
    $installment->setDate($dateBase);
    $dataBase = clone $dataBase;
}

输出结果为:
string(25)“1-Oct 1,2014 12:00:00 AM”
string(25)“2014年12月1日上午12:00:00”
string(25)“2014年12月1日12:00:00 AM”
string(26)“2015年1月31日12:00:00 AM”

你可以在第二个循环中看到(当$ i = 2时),他只增加2个月的内容

EDIT1:进行更多研究,我认为存在时区错误,我更改了代码

$date = new Zend_Date('10/1/2014');
var_dump($date);
$date->addMonth(1);
var_dump($date, $dateBase);
$dateBase->addMonth(1);
var_dump($dateBase); 

,输出如下:

object(Zend_Date)#3754 (8) {  
  ["_locale":"Zend_Date":private]=>  
  string(2) "en"  
  ["_fractional":"Zend_Date":private]=>  
  int(0)  
  ["_precision":"Zend_Date":private]=>  
  int(3)  
  ["_unixTimestamp":"Zend_Date_DateObject":private]=>  
  string(10) "1412114400"  
  ["_timezone":"Zend_Date_DateObject":private]=>  
  string(12) "Europe/Paris"  
  ["_offset":"Zend_Date_DateObject":private]=>  
  int(-3600)  
  ["_syncronised":"Zend_Date_DateObject":private]=>  
  int(0)  
  ["_dst":protected]=>  
  bool(true)  
}  
object(Zend_Date)#3754 (8) {  
  ["_locale":"Zend_Date":private]=>  
  string(2) "en"  
  ["_fractional":"Zend_Date":private]=>  
  int(0)  
  ["_precision":"Zend_Date":private]=>  
  int(3)  
  ["_unixTimestamp":"Zend_Date_DateObject":private]=>  
  int(1414796400)  
  ["_timezone":"Zend_Date_DateObject":private]=>  
  string(12) "Europe/Paris"  
  ["_offset":"Zend_Date_DateObject":private]=>  
  int(-3600)  
  ["_syncronised":"Zend_Date_DateObject":private]=>  
  int(0)  
  ["_dst":protected]=>  
  bool(true)  
}  

object(Zend_Date)#3755 (8) {  
    ["_locale":"Zend_Date":private]=>  
    string(2) "en"  
    ["_fractional":"Zend_Date":private]=>  
  int(0)  
  ["_precision":"Zend_Date":private]=>  
  int(3)  
  ["_unixTimestamp":"Zend_Date_DateObject":private]=>  
  string(10) "1412114400"  
  ["_timezone":"Zend_Date_DateObject":private]=>  
  string(9) "Etc/GMT-2"  
  ["_offset":"Zend_Date_DateObject":private]=>  
  int(-7200)  
  ["_syncronised":"Zend_Date_DateObject":private]=>  
  int(0)  
  ["_dst":protected]=>  
  bool(true)  
}  

object(Zend_Date)#3755 (8) {  
  ["_locale":"Zend_Date":private]=>  
  string(2) "en"  
  ["_fractional":"Zend_Date":private]=>  
  int(0)  
  ["_precision":"Zend_Date":private]=>  
  int(3)  
  ["_unixTimestamp":"Zend_Date_DateObject":private]=>  
  string(10) "1417384800"  
  ["_timezone":"Zend_Date_DateObject":private]=>  
  string(9) "Etc/GMT-2"  
  ["_offset":"Zend_Date_DateObject":private]=>  
  int(-7200)  
  ["_syncronised":"Zend_Date_DateObject":private]=>  
  int(0)  
  ["_dst":protected]=>  
bool(true)  
}  

您可以看到$ date和$ dataBase日期之间没有区别,只是时区,但是当我们向两者添加一个月时,它们的反应不同,$ dateBase又增加了一个月

1 个答案:

答案 0 :(得分:0)

Zend Framework 1.12文档表示如下:

例如,在1月31日添加一个月后,熟悉SQL的人将会在2月28日结束。另一方面,熟悉Excel和OpenOffice的人会期望3月3日结果。如果生成的月份没有在原始日期中设置的日期,则只会出现此问题。

如果您不了解此信息,请查看此链接:

http://framework.zend.com/manual/1.12/en/zend.date.overview.html