php strtotime"last monday"如果今天是星期一?

Nat*_*n H 35 php datetime strtotime

我想用strtotime("last Monday").

问题是,如果今天是星期一,那又回归了什么?它似乎正在返回上周一的星期日.在这种情况下,如何让它返回今天的日期?

jml*_*nik 121

如果您阅读本手册,有一个很好的例子可以准确描述您想要做什么http://www.php.net/manual/en/datetime.formats.relative.php

strtotime('Monday this week');
Run Code Online (Sandbox Code Playgroud)

更新:似乎在较新版本的PHP中引入了一个错误,this week在周日运行时返回错误的一周.您可以在此处对错误进行投票:https://bugs.php.net/bug.php?id = 63740

更新2:截至2016年5月18日,这已在PHP 5.6.22,PHP 7.0.7和PHP 7.1-dev中修复(并且希望在后续版本中保持固定),如下所示:https://bugs.php.net /bug.php?id=63740#1463570467

  • 好的解决方案 (6认同)
  • @Jose Garrido.也许是因为这个答案是在2年后给出的? (6认同)
  • 我不明白为什么其他答案被接受了.对于进一步的读者来说,这个解决方案更好,它完全符合要求. (3认同)

zer*_*kms 70

在这种情况下,如何让它返回今天的日期?

伪代码:

if (today == monday)
    return today;
else
    return strtotime(...);
Run Code Online (Sandbox Code Playgroud)

顺便说一下,这个技巧也可行:

strtotime('last monday', strtotime('tomorrow'));
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这一行技巧,有人看到它的任何问题吗? (12认同)
  • @nute:好吧,我已经检查了所有可能的情况:任何中间的一天,以及边缘:星期日和星期一.所有返回预期结果.我认为没有问题,除了语义;-) (3认同)

Vic*_*Vic 5

如果今天是星期一,则strtotime(“ last Monday”)将返回过去7天的日期。您为什么不只检查今天是否是星期一,如果是,请返回今天的日期,如果不是,请返回上周?

这将是一种万无一失的方法。

if (date('N', time()) == 1) return date('Y-m-d');
else return date('Y-m-d', strtotime('last Monday'));
Run Code Online (Sandbox Code Playgroud)

http://us2.php.net/manual/zh/function.date.php