如何使用PHP计算上一个月的今天

 更新时间:2013年05月23日 11:43:19   作者:  
本篇文章是对用PHP计算上一个月的今天的实例进行了详细的分析介绍,需要的朋友参考下
一日,遇到一个问题,求上一个月的今天。 最开始我们使用 strtotime(”-1 month”) 函数求值,发现有一个问题,月长度不一样的月份的计算结果有误。 比如:2011-03-31,得到的结果是2011-03-03。我们先不追究什么问题,先看如何解决问题。 此时,想起PHP中有一个mktime函数,于是自己写了如下代码:
复制代码 代码如下:

echo date("Y-m-d H:i:s", mktime(date("G", $time), date("i", $time),
 date("s", $time), date("n", $time) - 1, date("j", $time), date("Y", $time)));

当执行时,发现结果和strtotime的结果是一样的。
还是基于这个函数,既然无法直接操作月,那么我们从天入手,得到上一个月,然后再使用date拼接数据。如下代码:
复制代码 代码如下:

$time = strtotime("2011-03-31");
/**
 * 计算上一个月的今天
 * @param type $time
 * @return type
 */
function last_month_today($time) {
     $last_month_time = mktime(date("G", $time), date("i", $time),
                date("s", $time), date("n", $time), - 1, date("Y", $time));
     return date(date("Y-m", $last_month_time) . "-d H:i:s", $time);
}
echo last_month_today($time);

但是此时又有了另一个问题,不存在2011-02-31这样的日期,怎么办?现在的需求是对于这样的日期显示当月最后一天。 如下代码:
复制代码 代码如下:

 $time = strtotime("2011-03-31");
/**
 * 计算上一个月的今天,如果上个月没有今天,则返回上一个月的最后一天
 * @param type $time
 * @return type
 */
function last_month_today($time){
    $last_month_time = mktime(date("G", $time), date("i", $time),
                date("s", $time), date("n", $time), 0, date("Y", $time));
    $last_month_t =  date("t", $last_month_time);
    if ($last_month_t < date("j", $time)) {
        return date("Y-m-t H:i:s", $last_month_time);
    }
    return date(date("Y-m", $last_month_time) . "-d", $time);
}
echo last_month_today($time);

这里需要注意一点: date(”Y-m”, $last_month_time) . “-d”这段代码。在写代码的过程中如果写成了 “Y-” . date(”m”, $last_month_time) . “-d” 则在跨年的时间上有问题。 这点还是在写这篇文章时发现的。
除了这种方法,还可以先算出年月日再拼接字符串,这里就是纯粹的字符串操作了。

相关文章

  • PHP curl 或 file_get_contents 获取需要授权页面的方法

    PHP curl 或 file_get_contents 获取需要授权页面的方法

    本篇文章主要介绍了PHP curl 或 file_get_contents获取需要授权页面的方法,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-05-05
  • php判断输入不超过mysql的varchar字段的长度范围

    php判断输入不超过mysql的varchar字段的长度范围

    varchar类型字段,如果你设置长度为10,那么不论汉字和英文都可以存10个。
    2011-06-06
  • 使用PHP计算两个路径的相对路径

    使用PHP计算两个路径的相对路径

    本篇文章是对用PHP计算两个路径的相对路径进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php简单防盗链验证实现方法

    php简单防盗链验证实现方法

    这篇文章主要介绍了php简单防盗链验证实现方法,通过$_SERVER['HTTP_REFERER']获取来路页面URL再进行判断进而实现对非本地URL的拦截功能,需要的朋友可以参考下
    2016-07-07
  • phpMyadmin 用户权限中英对照

    phpMyadmin 用户权限中英对照

    在登陆phpmyadmin时选择了“中文 – Chinese Simplified“,那么就有中文的管理界面了,虽然在phpmyadmin中显示的用户权限显示的还是英文的,但是鼠标放上去时,有中文的提示,这里把phpmyadmin v3.2.4中英文对照表附上
    2010-04-04
  • PHP中十六进制颜色与RGB颜色值互转的方法

    PHP中十六进制颜色与RGB颜色值互转的方法

    今天小编就为大家分享一篇关于PHP中十六进制颜色与RGB颜色值互转的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • php feof用来识别文件末尾字符的方法

    php feof用来识别文件末尾字符的方法

    程序需要一种标准的方式来识别何时到达文件的末尾.这个标准通常称为文件末尾,或EOF字符。
    2010-08-08
  • PHP模拟asp中response类实现方法

    PHP模拟asp中response类实现方法

    这篇文章主要介绍了PHP模拟asp中response类的方法,可实现模拟ASP中response类处理客户端响应的功能,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • PHP中Cookie的使用详解(简单易懂)

    PHP中Cookie的使用详解(简单易懂)

    本篇文章主要介绍了PHP中Cookie的使用:添加/更新/删除/获取Cookie及自动填写该用户的用户名和密码和判断是否第一次登陆,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04
  • 配置eAccelerator和XCache扩展来加速PHP程序的执行

    配置eAccelerator和XCache扩展来加速PHP程序的执行

    这篇文章主要介绍了配置eAccelerator和XCache扩展来加速PHP程序的执行的方法,XCache和PHP5.5以来自带的Zend Opcache一样都是在共享内存中存储Opcode的缓存器,需要的朋友可以参考下
    2015-12-12

最新评论