2

我遇到了 php 的 DateTime 函数的问题。今天是 12 月 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 ?

编辑:: 我现在看到前一周是第 52 周,与闰年有什么关系?但是话又说回来,周怎么能回到01而不增加年份呢?

4

2 回答 2

4

那么为什么一周回到 01 而不增加年份,为什么另一行给我 2013_01 ?

我认为您显示的是“年”而不是“周年”。当您使用周数时,相关部分是周年;简单的“年”仅与月和日相关。

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

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

这应该显示2013_012012 年 12 月 31 日,因为它是在 2013 年的第 1 周。

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

于 2012-12-03T14:05:49.160 回答
2

这似乎没有错误。根据文档 W将返回ISO-8601 年份的周数,从星期一开始的周数(在 PHP 4.1.0 中添加),因为Mon, 31 Dec 2012 15:04:46 +0100是星期一,它将1代替52.

有关Wikipedia这个不错的站点的更多信息。

于 2012-12-03T14:07:36.983 回答