【问题标题】:PHP: strtotime() adds 3 days to date when it's not supposed toPHP:strtotime() 在不应该的时候添加 3 天
【发布时间】:2021-08-13 11:02:47
【问题描述】:

我的strtotime() 中有以下字符串:

"2021W32Monday"

我预计会在 2021 年第 32 周(即 2021 年 8 月 9 日)获得星期一的日期。但我得到的是 2021 年 8 月 12 日。

我在其他工作日做了一些实验,以下是我得到的结果:

"2021W32Tuesday"

  • 结果:2021 年 8 月 13 日
  • 预计:2021 年 8 月 10 日

"2021W32Wednesday"

  • 结果:2021 年 8 月 14 日
  • 预计:2021 年 8 月 11 日

"2021W31Monday"

  • 结果:2021 年 8 月 5 日
  • 预计:2021 年 8 月 2 日

基本上,它给我的日期似乎都太远了 3 天。为什么会这样?我在任何地方都没有 +3,我目前使用的整个命令实际上是 var_dump(date('Y-m-d', strtotime("2021W31Monday")))

不过,问题似乎出在字符串的格式上,因为当我简单地使用“今天”时,它给了我正确的日期。

【问题讨论】:

  • 我的猜测 - 这真的是strtotime() 应该识别的格式吗?我看到的唯一一个 in the docs 包含周是 compound format,它希望将日期作为数字。
  • 我不完全确定你的意思。另外,我使用的一切似乎都有效。 “This Monday”/“Last Monday”将正确地给我最后一个/下一个星期一,而“2021W31”将正确地给我 2021 年第 32 周的第一天,唯一的问题似乎是一旦我将工作日添加到一周年度最佳...但我会尝试将日期添加为数字!

标签: php date strtotime


【解决方案1】:

据我所知,你用错了,你应该像这样2021W323 其中前 4 位数字 2021 代表年份。后面的 3 位数字 W32 代表周数,最后一位数字 3 代表一周的第 3 天。

您也可以将它与破折号分隔符 2021-W32-3 一起使用

当我用字符串尝试你的示例日期名称时,我得到 -4 天日期。我不确定这是如何工作的。

这是一个附加功能,希望对您有所帮助:)

function get_week_num($day_name) {
  $week_days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
  $week_num = array_keys($week_days, $day_name)[0];
  return $week_num + 1;
}

get_week_num("Wednesday");

【讨论】:

  • 谢谢,这就像一个魅力!不过,我有点惊讶,因为 strtotime() 通常接受书面工作日(即“这个星期一”)......但只要它有效,我很高兴:D!
猜你喜欢
  • 1970-01-01
  • 2020-12-30
  • 2020-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 2021-06-09
  • 1970-01-01
相关资源
最近更新 更多