当前位置: 代码迷 >> 综合 >> 你真的知道 strtotime 吗?
  详细解决方案

你真的知道 strtotime 吗?

热度:4   发布时间:2023-12-27 02:02:40.0

课堂小提问

   echo date('Y-m-d', strtotime("-1 month", strtotime("2017-03-31")));输出什么?echo date('Y-m-d', strtotime(" +1 month", strtotime("2017-08-31")));输出又是什么?

现在公布正确答案了:

  echo date('Y-m-d', strtotime("-1 month", strtotime("2017-03-31")));//输出2017-03-03echo date('Y-m-d', strtotime(" +1 month", strtotime("2017-08-31")));//输出2017-10-01

小伙伴们,你们答对了吗?
没有答对也不要慌,接着往下看

为什么出现这种情况呢?为了让大家更容易理解,我们来模拟一下date内部对此的处理逻辑:

第一步:先做 -1 month,2017-07-31的 -1 month 就是2017-06-31
第二步:做日期规范化,因为6月没有31号,只有30号,多了一点要加上,所以6月31就等于了7月1日

又有人说了,我不想让日期规范化,我希望月底的 -1 month 或者 +1 month也是月底,怎么搞?
别急,这是我接下来要说的
从 PHP5.3 开始,date新增了一系列修正短语,来明确这个问题,也就是“first day of”和“last day of”,你可以限定好不要让date自动“规范化”

  echo date('Y-m-d', strtotime("last day of -1 month", strtotime("2017-03-31")));//输出2017-02-28echo date('Y-m-d', strtotime("first day of -1 month", strtotime("2017-03-31")));//输出2017-09-01

好啦,小伙伴们都记住了吧
记住的话,你们也可以当别人的老师了,小小炫耀一番,哈哈,我也是刚入手的知识,热乎着,大家如果想看一手资料,大手点一下:http://www.laruence.com/2018/07/31/3207.html
那么,课堂时间到此结束,bye~