PHP计算上一个月的今天的代码

发布时间:2019-10-07编辑:脚本学堂
本文介绍下,用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拼接数据。
例如:
 

复制代码 代码示例:
<?php
$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这样的日期,怎么办?
需求是对于这样的日期显示当月最后一天。
例如:
 

复制代码 代码示例:
<?php
$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计算上个月的今天的代码,就介绍到这里了,有点小波折,希望对大家有所帮助。