zoukankan      html  css  js  c++  java
  • PHP获取上个月最后一天的一个容易忽略的问题

    正常来说,PHP是有一个很方便的函数可以获取上个月时间的

    strtotime

    (PHP 4, PHP 5, PHP 7)
    strtotime — 将任何英文文本的日期时间描述解析为 Unix 时间戳

    说明 ¶

    int strtotime ( string $time [, int $now = time() ] )

    今天是2016-10-31日,所以strtotime('-1 month'),应该是9月30日

    echo date('Y-m-d',strtotime('-1 month'));
    

    可是实际上,输出的是2016-10-01,不但月份没对,日也没对上。
    猜测是9月没有31号,所以直接跑到10月1号了。

    所以要尝试另一种写法

    echo date('Y-m-d',strtotime('-1 month -1 day'));
    

    输出:2016-09-30

    这种写法是不是一定没问题的呢?
    我想到还要一个特殊的月份,今年的2月29号,所以要尝试一下在2月的时候会不会出问题。
    首先查表得2月29号的时间戳是1456675200

    echo date('Y-m-d',1456675200); //2016-02-29
    echo PHP_EOL;
    echo date('Y-m-d',strtotime('-1 month',1456675200)); //2016-01-29
    echo PHP_EOL;
    echo date('Y-m-d',strtotime('-1 month -1 day',1456675200)); //2016-01-28
    

    结果是两个都不对了..

    所以终级写法是,先获取本月的第一天,再-1天

    $time =  strtotime(date('Y-m-01',1456675200));
    echo date('Y-m-d',strtotime('-1 day',$time));  //2016-01-31
    
  • 相关阅读:
    Array数组的使用
    map集合中取出分类优先级最高的类别名称
    关键字static介绍
    构造方法
    封装和private,this,super关键字的简单应用
    hitTest:withEvent:方法流程
    Events and Responder Chain
    block没那么难(一):block的实现
    [译] Block 小测验
    OAuth流程
  • 原文地址:https://www.cnblogs.com/jaychan/p/6014965.html
Copyright © 2011-2022 走看看