1

我试图将日期“YYYY/MM/DD”转换为“YYYY/WW”格式,这样我就可以存储每周聚合数据,其结构如下

aggre_date(YYYY/WW)    value    id

但是我发现了一个讨厌的问题

$dateTime  = new DateTime("2014-12-30");
echo $dateTime->format("Y-W")."\n";
$dateTime  = new DateTime("2014-01-01");
echo $dateTime->format("Y-W")."\n";

结果完全一样2014-01,但应该是前者2015-01

有什么方法可以改进我的每周聚合数据设计或获得“正确”的年份?

4

1 回答 1

4

您需要o用于 ISO 年:

ISO-8601 年编号。这与 Y 具有相同的值,除了如果 ISO 周数 (W) 属于上一年或下一年,则使用那一年。(在 PHP 5.1.0 中添加)

$dateTime  = new DateTime("2014-12-30");
echo $dateTime->format("o-W")."\n";
$dateTime  = new DateTime("2014-01-01");
echo $dateTime->format("o-W")."\n";

2015-01
2014-01

演示

于 2015-04-28T02:19:42.640 回答