Php DateTime和#x2B;1周和-1周工作不一样

Php DateTime和#x2B;1周和-1周工作不一样,php,datetime,Php,Datetime,我有几个函数在几个星期内来回切换 我发现了一个令人惊讶且不受欢迎的行为: $date = new DateTime(); $date->setISODate(2014, 52); $date->modify('+1 week'); echo date('YW', $date->getTimestamp()) . '<br />'; $date->setISODate(2014, 01); $date->modify('-1 week'); echo d

我有几个函数在几个星期内来回切换

我发现了一个令人惊讶且不受欢迎的行为:

$date = new DateTime();
$date->setISODate(2014, 52);
$date->modify('+1 week');
echo date('YW', $date->getTimestamp()) . '<br />';

$date->setISODate(2014, 01);
$date->modify('-1 week');
echo date('YW', $date->getTimestamp()) . '<br />';
$date=new DateTime();
$date->setISODate(2014,52);
$date->modify(“+1周”);
回显日期('YW',$date->getTimestamp())。'
; $date->setISODate(2014,01); $date->modify('-1周'); 回显日期('YW',$date->getTimestamp())。'
此代码打印:
201401
201352

我的期望是:
201501
201352

三个问题:

1) 我是否在上述代码中做了错误的事情,或者“+1周”和“-1周”之间是否存在不一致的行为(如第一个案例中未被步进的年份)

评论回复:
它从不增加/减少年份,但第1周恰好开始于2013年12月,因此在“-1周”示例中,它似乎是减少年份

2) 如果有不一致的地方,我能相信代码在不同的平台和PHP版本上都能正常工作吗

回答:
无不一致(见接受答案)

3) 有没有更好的方法可以让一周的时间前后移动(输入是一年一周,输出也是一年一周)

奖金问题)如果确实存在不一致,有人知道原因吗

回答:
没有不一致之处,请参见第1条的答案以了解解释

  • Y是从日期算起的年份
  • o是ISO-8601年编号
  • W是ISO-8601年的周数

如果使用“W”作为周数,则使用“o”作为年数。

我建议您在修改前打印完整日期(“正常”年/月/日以及周/日)。这可能有助于诊断问题。好主意,我没想到。。。是的。添加:回显日期('YW',$date->getTimestamp())。'
;回显日期('Y-m-d',$date->getTimestamp())。'
“。。。在每次修改之前。输出:201452 2014-12-22 201401 201301 2013-12-30 201352,这意味着它不步进年份,但在第一种情况下有效,因为第52周开始于12月,因此年份已经减少。这可能会澄清: