我有一个非常奇怪的问题,Zend_Date将我的时间戳转换为一年前。
在我的行动中:
// Timestamp
$intTime = 1293922800;
// Zend_Date object
$objZendDate = new Zend_Date($intTime);
// Get date
echo date('Y-m-d',$intTime).'<br>';
echo $objZendDate->get('YYYY-MM-dd');
这输出: 2011-01-02 2010-01-02
谁能告诉我我做错了什么?
答案 0 :(得分:13)
从ZF问题跟踪器看来,这是一个已知问题:
最近很多ZF用户正在提交Zend_Date在2009年而不是2008年返回错误年份的错误。但这是预期的行为,而不是一个BUG!
来自常见问题:
在您的代码中使用自己的格式时,您可能会遇到例如29.12.2009的情况,但您希望得到29.12.2008。
有一年的差异:2009年而不是2008年。您应该使用较低的年度常数。见这个例子:
$日期 - &GT;的toString( 'DD.MM.YYYY');
而不是
$日期 - &GT;的toString( 'DD.MM.YYYY');
来自手册
请注意,默认的ISO格式与PHP的格式不同,如果您之前没有使用过,这种格式可能很烦人。特别是年份和分钟的格式说明符通常不会以预期的方式使用。
对于一年,有两个可用的说明符经常被误解。 ISO年份的Y说明符和实际年份的y说明符。差异很小但很重要。 Y计算ISO年份,通常用于日历格式。例如,参见2007年12月31日。实际年份是2007年,但它是2008年第1周第一周的第一天。所以,如果你使用'dd.MM.yyyy',你会得到'31。2007年12月'但如果你使用'dd.MM.YYYY',你将获得'31。2008年12月'。如您所见,这不是错误,而是预期的行为,具体取决于使用的说明符。
分钟差异不是那么大。与使用i的PHP不同,ISO使用分钟的m。因此,如果您的格式没有得到任何分钟,请检查您是否使用了正确的说明符。
答案 1 :(得分:0)
要添加到zwip's answer,幕后发生的事情是您的日期格式YYYY-MM-dd
实际上已转换为o\-m\-d
,然后在内部传递给PHP的date()
函数你提供的时间戳。
如其他答案中提到的,以及date format页面上o
格式的文档中提到的,基于ISO周的年度计算有时会导致年份不同达到您期望的价值。