2

我一直在使用 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
4

1 回答 1

1

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

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

上面的脚本不是按原样运行的,而是运行的:

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

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

该问题仅在给定月份的 31 日出现(因此,为什么在发布回复时,人们无法复制该问题),设置为 4 月、6 月、9 月或 11 月;或将月份设置为 2 月时的每月 29 日/30 日/31 日。

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

你当然会反过来遇到同样的问题,即你在一个 < 31 天的月份,并设置 days = 31,它溢出到下个月的 1 号,这意味着你的日期将在正确月份的 1 号!

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

希望这可以帮助!

于 2013-02-20T15:34:56.137 回答