一日遇到一个问题求上一个月的今天 最开始我们使用 strtotime(” month”) 函数求值发现有一个问题月长度不一样的月份的计算结果有误 比如得到的结果是我们先不追究什么问题先看如何解决问题 此时想起PHP中有一个mktime函数于是自己写了如下代码
代码如下:
echo date("Ymd H:i:s" mktime(date("G" $time) date("i" $time)
date("s" $time) date("n" $time) date("j" $time) date("Y" $time)));
当执行时发现结果和strtotime的结果是一样的
还是基于这个函数既然无法直接操作月那么我们从天入手得到上一个月然后再使用date拼接数据如下代码
复制代码 代码如下:
$time = strtotime("");
/**
* 计算上一个月的今天
* @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) date("Y" $time));
return date(date("Ym" $last_month_time) "d H:i:s" $time);
}
echo last_month_today($time);
但是此时又有了另一个问题不存在这样的日期怎么办?现在的需求是对于这样的日期显示当月最后一天 如下代码
代码如下:
$time = strtotime("");
/**
* 计算上一个月的今天如果上个月没有今天则返回上一个月的最后一天
* @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) date("Y" $time));
$last_month_t = date("t" $last_month_time);
if ($last_month_t < date("j" $time)) {
return date("Ymt H:i:s" $last_month_time);
}
return date(date("Ym" $last_month_time) "d" $time);
}
echo last_month_today($time);
这里需要注意一点 date(”Ym” $last_month_time) “d”这段代码在写代码的过程中如果写成了 “Y” date(”m” $last_month_time) “d” 则在跨年的时间上有问题 这点还是在写这篇文章时发现的
除了这种方法还可以先算出年月日再拼接字符串这里就是纯粹的字符串操作了