Zend_Date看起来不行

时间:2012-01-31 19:32:35

标签: php zend-framework zend-date

我一直在使用Zend_Date。任何人都可以告诉我,以下行为是否正常?返回的月份似乎是错误的。我把输出放在评论中。

感谢您的帮助!

$oDate = new Zend_Date();

$oDate->setMonth(1);
$oDate->setDay(15);
$oDate->setYear(2012);
echo $oDate->get(Zend_Date::DATETIME_FULL);//Sunday, January 15, 2012 8:24:59 PM Europe/Madrid

$oDate->setMonth(2);
echo $oDate->get(Zend_Date::DATETIME_FULL);//Thursday, March 15, 2012 8:25:20 PM Europe/Madrid

$oDate->setMonth(3);
echo $oDate->get(Zend_Date::DATETIME_FULL);//Thursday, March 15, 2012 8:25:40 PM Europe/Madrid

$oDate->setMonth(4);
echo $oDate->get(Zend_Date::DATETIME_FULL);//Tuesday, May 15, 2012 8:27:32 PM Europe/Madrid

$oDate->setMonth(5);
echo $oDate->get(Zend_Date::DATETIME_FULL);//Tuesday, May 15, 2012 8:28:05 PM Europe/Madrid

1 个答案:

答案 0 :(得分:1)

关键是您的原始发布日期。

在有31天的月份中,如果您在第31天并且将月份()设置为具有较少天数(即2月,4月,6月,9月或11月)的月份,则它将该日期计算为该月份的第31个月溢出到下个月的第一天。

上面的脚本没有按原样运行,但是运行了:

  $oDate->setMonth();
  $oDate->setDay();
  $oDate->setYear();
  echo ...

每个月,因此不同的时间。

问题只出现在给定月份的第31天(因此,当回复发布时,人们无法复制问题的原因),设定为4月,6月,9月或11月;或者将月份设定为2月份的29/30/31。

您可以在上面的示例中通过设置第一天,然后月份来解决此问题(因为月份不会溢出)。

你当然会反过来得到同样的问题,你可以在一个月内使用< 31天,并设置天数= 31,这将溢出到下个月的第1天,这意味着您的日期将在正确的月份的第1天!

不幸的是,我还没有找到一个简单的解决方案(除了根据PHP的DateTime类编写一个新的日期类)。

希望这有帮助!

相关问题