你真的知道 strtotime 吗?

课堂小提问

   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-03
  echo 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-28
  echo 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~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值