我遇到了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周?
答案 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
。
有关documentation和Wikipedia的更多信息。