加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 06:18:00 所属栏目:PHP教程 来源:网络整理
导读:一日,遇到一个问题,求上一个月的今天。 最开始我们使用 strtotime(”-1 month”) 函数求值,发现有一个问题,月长度不一样的月份的计算结果有误。 比如:2011-03-31,得到的结果是2011-03-03。我们先不追究什么问题,先看如何解决问题。 此时,想起PHP中有

一日,遇到一个问题,求上一个月的今天。 最开始我们使用 strtotime(”-1 month”) 函数求值,发现有一个问题,月长度不一样的月份的计算结果有误。 比如:2011-03-31,得到的结果是2011-03-03。我们先不追究什么问题,先看如何解决问题。 此时,想起PHP中有一个mktime函数,于是自己写了如下代码:
<div class="codetitle"><a style="CURSOR: pointer" data="69915" class="copybut" id="copybut69915" onclick="doCopy('code69915')"> 代码如下:<div class="codebody" id="code69915">
echo date("Y-m-d H:i:s",mktime(date("G",$time),date("i",
date("s",date("n",$time) - 1,date("j",date("Y",$time)));

当执行时,发现结果和strtotime的结果是一样的。
还是基于这个函数,既然无法直接操作月,那么我们从天入手,得到上一个月,然后再使用date拼接数据。如下代码:
<div class="codetitle"><a style="CURSOR: pointer" data="61629" class="copybut" id="copybut61629" onclick="doCopy('code61629')"> 代码如下:<div class="codebody" id="code61629">
$time = strtotime("2011-03-31");
/
计算上一个月的今天
@param type $time
@return type
/
function last_month_today($time) {
$last_month_time = mktime(date("G",
date("s",- 1,$time));
return date(date("Y-m",$last_month_time) . "-d H:i:s",$time);
}
echo last_month_today($time);

但是此时又有了另一个问题,不存在2011-02-31这样的日期,怎么办?现在的需求是对于这样的日期显示当月最后一天。 如下代码:
<div class="codetitle"><a style="CURSOR: pointer" data="39603" class="copybut" id="copybut39603" onclick="doCopy('code39603')"> 代码如下:<div class="codebody" id="code39603">
$time = strtotime("2011-03-31");
/

计算上一个月的今天,如果上个月没有今天,则返回上一个月的最后一天
@param type $time
@return type
/
function last_month_today($time){
$last_month_time = mktime(date("G",$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” 则在跨年的时间上有问题。 这点还是在写这篇文章时发现的。
除了这种方法,还可以先算出年月日再拼接字符串,这里就是纯粹的字符串操作了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读