美文网首页程序员
php中的strtotime的一个奇怪问题

php中的strtotime的一个奇怪问题

作者: 七剑演武堂 | 来源:发表于2018-09-17 09:38 被阅读0次

    strtotime()是php日期函数当中非常灵活的一个函数, 可以实现一些语义化的操作. 比如: +1 day, -1 month, next year 这样的操作.
    但是在实际体验当中,发现了一个奇怪的问题(今天是2016-03-31)

    var_dump(date('Y-m-d', strtotime('2016-03-31 - 1 month')));
    

    得出的结果是: string '2016-03-02' (length=10)

    这不是扯呢么, 我明明让他减得是一个月啊, 我期望的结果是 '2016-02-28', 为什么会出现这样的情况呢?

    我们从头开始去分析: 2016-03-31 减去一个月, 得到的结果是 2016-02-31, 但是2016年并没有2月31号, 只有29号

    var_dump(date('Y-m-d', strtotime('2016-02-31')));
    

    得到的结果是string '2016-03-02' (length=10)

    这么看来strtotime函数并没有做错什么, 那我们怎么样才能得到我们预期的效果呢?

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

    var_dump(date('Y-m-d', strtotime('last day of 2016-03-31 - 1 month')));   //2016-02-29
    var_dump(date('Y-m-d', strtotime('first day of 2016-02-29 + 1 month')));  //2016-03-01
    

    弄明白了这些, 就能更好的使用strtotime函数, 达到我们的预期结果.

    相关文章

      网友评论

        本文标题:php中的strtotime的一个奇怪问题

        本文链接:https://www.haomeiwen.com/subject/fitknftx.html