一日,遇到一个问题,求上一个月的今天。 最开始我们使用 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 计算上个月,如何使用PHP计算上一个月的今天相关推荐

  1. 【转】使用PHP计算上一个月的今天

    转自:http://www.phppan.com/2011/06/php-last-month-today/ 一日,遇到一个问题,求上一个月的今天. 最开始我们使用 strtotime("- ...

  2. 简单快捷计算本月第一天星期几、本月有多少天、上一个月的最后一天是几号

    今天偶然在vue2/nodejs视频中看到一个计算"本月第一天星期几.本月有多少天.上一个月的最后一天是几号" 最简便最快捷的方法. 如果自己写,就很容易要判断闰年问题,那就非常复 ...

  3. 查询一个表中一个字段相同的数据_最实用MySQL 查询当天、本周,本月、上一个月的数据...

    MySQL 查询当天.本周,本月.上一个月的数据 mysql查询当天的所有信息: SELECT * FROM 表名 WHERE year(时间字段名)=year(now()) and month(时间 ...

  4. 根据指定日期获取上一个月

    根据指定日期获取上一个月 看过不少类似文章,根据一个日期,要取得相应的上一个月的值,则利用Calendar的api:get(Calendar.MONTH) - 1)来算. 思路是对的,但这个api有坑 ...

  5. 获取当前日期的上一个月和后三个月。

    import datetime from dateutil.relativedelta import relativedelta #获取当前日期的上一个月和后一个月 print(datetime.da ...

  6. Calendar类获取当前时间上一个月,下一个月,当月的最后一天等的处理方法

    Calendar cal = Calendar.getInstance();//获取一个Calendar对象 cal.setTime(new Date() ); cal.add(Calendar.MO ...

  7. Java获取当前时间的上一个月和下一个月,第一天和最后一天,任意时间的第一天和最后一天,任意时间上一个月和下一个月

    /*** 获取当前时间* * @param args*/public static String getNowTime() {Calendar cal = Calendar.getInstance() ...

  8. Java 获取上一个月的月份

    因最近在写代码的时候遇到了获取上个月月份的问题YYYYMM这个格式,根据给的工具类,获取出来的值是有问题的,所以记录以下. 问题方法 /*** 获取上个月的月份* 该方法有问题 三月份的29 30 3 ...

  9. js 获取当前日期的上一个月

    // 获取当前日期的上一个月 export function getlastMonth() {let now = new Date();// 当前月的日期let nowDate = now.getDa ...

最新文章

  1. 元宇宙开发:你在虚幻引擎中的第一个虚拟现实游戏
  2. Python——文件操作详解
  3. JVM基础系列第14讲:JVM参数之GC日志配置
  4. 微软(MS Dynamics SL)Solomon 承包商用户2006年度会议!
  5. sql server新增列_SQL Server 2016安装中的新增功能?
  6. R语言之随机数与抽样模拟篇
  7. 三菱Q系列PLC大型程序Q01U伺服12轴
  8. 大学群管机器人的建设畅想
  9. Winrar去广告图文教程
  10. 《巴菲特致股东的信》十年期固定行使价格期权对公司的侵蚀-计算过程演示
  11. Allegro PCB多层板中负片热风焊盘的制作以及flash的添加
  12. 关于魔兽的电脑优化配置方法
  13. igraph包安装教程
  14. [UOJ311]积劳成疾
  15. 简单实现mui-底部选项卡
  16. 埋点 神策小程序_神策埋点思路
  17. linux安装软件源有问题,opensuse软件安装源问题
  18. Leetcode算法Java全解答--19. 删除链表的倒数第N个节点
  19. axure交互页面设计【学习篇01】
  20. HashMap集合常见方法

热门文章

  1. springboot 控制台输出错误信息_SpringBoot 三招组合拳,手把手教你打出优雅的后端接口...
  2. java 实现根据ip重定向_从0到1用java再造tcpip协议栈:代码实现ping应用功能1
  3. 为什么都建议学java而不是python-为什么java比python复杂,还是有很多人选择学习java?...
  4. python就业方向-目前Python这么火,Python有哪些就业方向?
  5. python编程是干嘛的-Python编程一般可以用来做什么
  6. python画柱状图-Python Excel 绘制柱形图
  7. python可以做什么工作-python都能干什么用
  8. 传祺 GS4 和博越 PRO 不知道选谁?体验后的最真实的评价
  9. 语音识别看似神通广大 但它真的听得懂方言么
  10. 语音识别kaldi该如何学习?