【问题标题】:strtotime thinks "first sunday next month" = wednesday?strtotime 认为“下个月的第一个星期日”= 星期三?
【发布时间】:2014-10-07 11:28:55
【问题描述】:

strtotime 有点神奇。虽然我知道它什么都做不了,但我总是在寻找正确的解决方案之前先猜测一下。

所以我想得到下个月的第一个星期日和星期一。我试过这个:

strtotime("first Sunday next month")
strtotime("first Monday next month")

格式化 (%d/%m/%y) 后的结果是:

12/11/2014
13/11/2014

那些是星期三和星期四。是什么赋予了?我预计它不会起作用或给我错误的星期天,但是星期三在那里做什么?

更新

我不需要帮助来弄清楚如何获得下个星期天。我知道如何进行正确的计算(无论如何我知道如何查找正确的方法)。我上面的猜测只是我在四处寻找捷径。 我想知道,但是为什么我会得到这个似乎与我写的所有内容完全无关的奇怪结果

【问题讨论】:

  • FWIW,strtotime 不是一个神奇的全能功能。它可以解析一些日期格式和一些特殊的相关指令。无论您向它扔什么,它都不会总是给您 what-I-mean 结果。您只需在此处进行更多手动计算。
  • @deceze 我知道。我在问题中写了很多。我只是觉得得到一个完全不相关的日期很奇怪(而不是,也许,false 或其他东西)

标签: php strtotime


【解决方案1】:

试试这个:

echo date('r', strtotime("first Sunday of next month")) . PHP_EOL;
echo date('r', strtotime("first Monday of next month")) . PHP_EOL;

这非常棘手,但您需要确保您的格式在手册的Relative Formats 部分中准确描述。在这种情况下,您需要序数空间 dayname space 'of'。否则,它可能只是按顺序进行了两次不同的计算。

在这种情况下,由于整个表达式没有已知的格式,它会被拆分:

  1. 移至下周日:2014 年 10 月 12 日,周日
  2. 移至下个月:2014 年 11 月 12 日,星期三

测试代码:

echo date('r', strtotime("first Sunday next month")) . PHP_EOL;
echo date('r', strtotime("first Monday next month")) . PHP_EOL;

echo PHP_EOL;

echo date('r', strtotime("first Sunday")) . PHP_EOL;
echo date('r', strtotime("first Monday")) . PHP_EOL;
echo date('r', strtotime("next month")) . PHP_EOL;

免责声明:我自己几乎从来没有做对。

【讨论】:

  • 谢谢,但我不是在寻找一种方法来实现这一点(我还需要检查今天是否在当月的第一个星期日之前,所以我不能那样做)。我在问为什么我会得到奇怪的结果
  • 是的!这就是我一直在寻找的。一些有意义的事情。谢谢! =]
【解决方案2】:

试试

// strtotime("first Sunday", strtotime("next month")); // wrong
echo date("%d/%m/%y", strtotime("first sunday of next month"));

但是输出invalid results for PHP 4.3 - 5.2.17!

【讨论】:

  • 再次感谢,但不是我想要的。我想知道为什么我会得到这么奇怪的结果。我知道如何进行正确的计算(并且我知道如何查找正确的语法)。我想了解的是strtotime 是如何挑选周三的。
  • 您因“无效”事物而获得 +1。不知道5.3之前没用
猜你喜欢
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
相关资源
最近更新 更多