php使用strtotime技巧示例解惑

 更新时间:2022年09月20日 16:15:15   作者:Student_Li  
这篇文章主要为大家介绍了php使用strtotime技巧示例解惑,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

经常会有人被 strtotime 结合 - 1 month, +1 month, next month 的时候搞得很困惑,然后就会觉得这个函数有点不那么靠谱,动不动就出问题。用的时候就会很慌…

这不,刚刚就有人在微博上又问我:

date("Y-m-d",strtotime("-1 month"))

今天是 2018-07-31 执行代码,怎么输出是 2018-07-01?

好的吧,虽然这个问题看起来很迷惑,但从内部逻辑上来说呢,其实是” 对” 的,你先别着急哈,让我慢慢讲:

我们来模拟下 date 内部的对于这种事情的处理逻辑:

先做 - 1 month, 那么当前是 07-31, 减去一以后就是 06-31.
再做日期规范化,因为 6 月没有 31 号,所以就好像 2 点 60 等于 3 点一样,6 月 31 就等于了 7 月 1
是不是逻辑很” 清晰” 呢?我们也可以手动验证第二个步骤,比如:

var_dump(date("Y-m-d", strtotime("2017-06-31")));
//输出2017-07-01

也就是说,只要涉及到大小月的最后一天,都可能会有这个迷惑,我们也可以很轻松的验证类似的其他月份,印证这个结论:

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

那怎么办呢?

从 PHP5.3 开始呢,date 新增了一系列修正短语,来明确这个问题,那就是”first day of” 和 “last day of”, 也就是你可以限定好不要让 date 自动” 规范化”:

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

那如果是 5.3 之前的版本 (还有人用么?), 你可以使用 mktime 之类的,把所有的日子忽略掉,比如都限定为每月 1 号就可以了,只不过就不如直接用 first day 来的更加优雅.

以上就是php使用strtotime技巧示例解惑的详细内容,更多关于php strtotime解惑的资料请关注脚本之家其它相关文章!

相关文章

  • php实现简单加入购物车功能

    php实现简单加入购物车功能

    本文主要介绍了php实现简单加入购物车功能的方法,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • PHP与MySQL开发中页面乱码的产生与解决

    PHP与MySQL开发中页面乱码的产生与解决

    一般来说,乱码的出现有2种原因,首先是由于编码(charset)设置错误,导致浏览器以错误的编码来解析,从而出现了满屏乱七八糟的“天书”,其次是文件被以错误的编码打开,然后保存,比如一个文本文件原先是GB2312编码的,却以UTF-8编码打开再保存。要解决上述乱码问题,首先需要知道开发中哪些环节涉及到了编码:
    2008-03-03
  • php生成网页桌面快捷方式

    php生成网页桌面快捷方式

    本文将介绍使用PHP生成网页桌面快捷方式的代码,并添加图标及解决不同浏览器保存出现的乱码问题。下面跟着小编一起来看下吧
    2017-05-05
  • php编写批量生成不重复的卡号密码代码

    php编写批量生成不重复的卡号密码代码

    本文给大家分享的是一个十分实用的代码,项目中经常需要用到,可以批量生成不重复的卡号密码的2种方法,有需要的小伙伴参考下吧。
    2015-05-05
  • Linux服务器下PHPMailer发送邮件失败的问题解决

    Linux服务器下PHPMailer发送邮件失败的问题解决

    这篇文章主要给大家介绍了关于如何解决Linux服务器下PHPMailer发送邮件失败的问题,文中通过示例代码介绍的很详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • 浅谈PHP定义命令空间的几个注意点(推荐)

    浅谈PHP定义命令空间的几个注意点(推荐)

    下面小编就为大家带来一篇浅谈PHP定义命令空间的几个注意点(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • php实现获取本年,本月,本周时间戳和日期格式

    php实现获取本年,本月,本周时间戳和日期格式

    这篇文章主要为大家详细介绍了php实现获取本年、本月、本周时间戳和日期格式的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下
    2023-12-12
  • php递归实现无限分类生成下拉列表的函数

    php递归实现无限分类生成下拉列表的函数

    php自定义函数之递归实现无限分类生成下拉列表,这样可以提高效率,不用每次都从数据库读取数据。
    2010-08-08
  • php定期拉取数据对比方法实例

    php定期拉取数据对比方法实例

    这篇文章主要给大家介绍了关于php定期拉取数据对比的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用php具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • 详解PHP中mb_strpos的使用

    详解PHP中mb_strpos的使用

    这篇文章主要介绍了详解PHP中mb_strpos的使用,通过使用语法以及实例给大家详细分析了用法,需要的朋友参考学习下。
    2018-02-02

最新评论