如何使用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” 则在跨年的时间上有问题。 这点还是在写这篇文章时发现的。
除了这种方法,还可以先算出年月日再拼接字符串,这里就是纯粹的字符串操作了。

相关文章

  • mac下多个php版本快速切换的方法

    mac下多个php版本快速切换的方法

    这篇文章主要给大家介绍了在mac下多个php版本快速切换的方法,本文先是给大家分享了使用brew安装php多版本的方法,而后才介绍了快速切换的实现方法,感兴趣的朋友们下面来一起看看吧。
    2016-10-10
  • php设计模式 DAO(数据访问对象模式)

    php设计模式 DAO(数据访问对象模式)

    数据访问对象(Data Access Object) 示例 ,学习php的朋友可以参考下。
    2011-06-06
  • PHP抓取远程图片(含不带后缀的)教程详解

    PHP抓取远程图片(含不带后缀的)教程详解

    最近在做微信登录开发时候,发现微信头像图片没有后缀名,传统的图片抓取方式不奏效,需要特殊的抓取处理。所以,后来将各种情况结合起来,封装成一个类,分享出来给大家,感兴趣的朋友们下面来一起看看吧。
    2016-10-10
  • php批量添加数据与批量更新数据的实现方法

    php批量添加数据与批量更新数据的实现方法

    这篇文章主要介绍了php批量添加数据与批量更新数据的实现方法,涉及针对表单的处理与sql语句的灵活使用,非常具有实用价值,需要的朋友可以参考下
    2014-12-12
  • php无需编译安装openssl扩展的实现方法

    php无需编译安装openssl扩展的实现方法

    下面小编就为大家分享一篇php无需编译安装openssl扩展的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • php实现文件下载代码分享

    php实现文件下载代码分享

    php实现文件下载我们需要用到header函数来发送相关信息给客户端浏览器,同时再结合filesize函数来读取文件大小并进行下载操作,下面我们一起来看看相关例子。
    2014-08-08
  • php部分常见问题总结

    php部分常见问题总结

    php常见问题解决集锦,主要包括php的运行方法等小技巧
    2008-03-03
  • php连接oracle数据库的方法(测试成功)

    php连接oracle数据库的方法(测试成功)

    这篇文章主要介绍了php连接oracle数据库的方法,简单分析了php连接Oracle数据库的常见方法与具体操作技巧,并对可能出现的问题进行了总结分析,需要的朋友可以参考下
    2016-05-05
  • PHP实现页面跳转的几种常见方式总结

    PHP实现页面跳转的几种常见方式总结

    PHP实现页面跳转有多种方式,常用的包括使用header()函数、使用JavaScript进行跳转、使用meta标签、使用超链接等,下面分别详细介绍这几种方式,并举例说明,需要的朋友可以参考下
    2023-11-11
  • PHP Directory 函数的详解

    PHP Directory 函数的详解

    PHP Directory 函数的详解 ,需要的朋友可以参考一下
    2013-03-03

最新评论