php datetime bug?

时间:2012-12-03 14:00:07

标签: php date datetime

我遇到了php的DateTime函数问题。 今天是星期一3月3日。

假设以下代码:

$dte = new DateTime(date('Y-m-d H:i:s'));
var_dump($dte->format('Y-W'));
$dte->modify('+4 weeks');
var_dump($dte->format('Y-m-d H:i:s -- Y_W'));
$dte->modify('+1 days');
var_dump($dte->format('Y-m-d H:i:s -- Y_W'));

四周之后,它将是12月31日。我怀疑要获得一年中的最后一周(52?)。但我得到的是2012年第1周,您可以在以下输出中看到。

string '2012-49' (length=7)
string '2012-12-31 14:48:00 -- 2012_01' (length=30)
string '2013-01-01 14:48:00 -- 2013_01' (length=30)

所以我的问题是,在第一次修改之后,我想我应该得到:

2012-12-31 14:48:00 -- 2012_52

但我得到了

2012-12-31 14:48:00 -- 2012_01

那么为什么本周会在不增加年份的情况下回到01,而为什么另一条线给我2013_01?

EDIT :: 我现在看到前一周是52周,与闰年有什么关系? 但话又说回来,如何在不增加年份的情况下回到01周?

2 个答案:

答案 0 :(得分:3)

  

那么为什么本周会在不增加年份的情况下回到01,而为什么另一条线给我2013_01?

我认为你正在展示“年”而不是“周年”。当你使用周数时,它是相关部分的周年;简单的“年”只与月和日相关。

编辑:我认为您想要o格式说明符,所以请尝试:

var_dump($dte->format('Y-m-d H:i:s -- o_W'));

这应该会显示2012年12月31日2013_01,就像2013年第1周那样。

所以基本上,我不认为这是DateTime中的错误 - 这只是对如何使用“一年中的一周”的误解。

答案 1 :(得分:1)

这似乎不是错误。根据{{​​3}} W将返回 ISO-8601周数,星期一开始的星期(在PHP 4.1.0中添加),因为Mon, 31 Dec 2012 15:04:46 +0100是星期一它将是1而不是52

有关documentationWikipedia的更多信息。