php - 日期时间,+1 周和 -1 周工作方式不同

标签 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 date('YW', $date->getTimestamp()) . '<br />';

此代码打印:
201401
201352

我的期望是:
201501
201352

三个问题:

1)我在上面的代码中做错了什么,或者“+1周”和“-1周”之间是否存在不一致的行为(如在第一种情况下年份没有被步进)?

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

2) 如果存在不一致,我可以相信代码在不同平台和 PHP 版本上都能正常工作吗?

答案:
没有不一致之处(参见已接受的答案)

3)是否有更好的方法可以在时间上前后移动 1 周(输入是年和周,输出也是年和周)?

奖励问题)如果确实存在不一致,有人知道为什么吗?

答案:
没有不一致之处,请参阅第 1 条答案的解释

最佳答案

  • Y 是自该日期起的年份
  • o 是 ISO-8601 年份编号
  • W 是 ISO-8601 一年中的周数

如果使用“W”表示周数,则使用“o”表示年份。

关于php - 日期时间,+1 周和 -1 周工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21961351/

相关文章:

mysql 从日期时间字段中获取所有可能的月份

java - 将人类时间与计算机时间结合成合成时间

java - 从日期中减去一天,格式为 mm/dd/yyyy

php - 动态地在表单中传递 JQuery 变量

php - 合并多维数组并对在另一列中共享公共(public)值的列值求和

php - Laravel 创建一个 JSON 数组

r - 以 YYYY-MM-DDTHH-MM-SSZ 格式解析 ISO 8601 日期时间

MySql 脚本将所有数据库日期时间字段值从特定时区转换为 UTC

php - 检测当前页面是否为Web根目录

php - 我的 SQL 查询根据表中其他列的值获取一定范围内的值