我一直在使用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
答案 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类编写一个新的日期类)。
希望这有帮助!