【转】使用PHP计算上一个月的今天
转自:http://www.phppan.com/2011/06/php-last-month-today/
一日,遇到一个问题,求上一个月的今天。 最开始我们使用 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” 则在跨年的时间上有问题。 这点还是在写这篇文章时发现的。
除了这种方法,还可以先算出年月日再拼接字符串,这里就是纯粹的字符串操作了。
感触:
- 一个月不写代码,会手生。
- 代码写完后请多次review或重构,即使比较简单的代码。
转载于:https://www.cnblogs.com/fzzl/archive/2013/01/06/2848035.html
【转】使用PHP计算上一个月的今天相关推荐
- php 计算上个月,如何使用PHP计算上一个月的今天
一日,遇到一个问题,求上一个月的今天. 最开始我们使用 strtotime("-1 month") 函数求值,发现有一个问题,月长度不一样的月份的计算结果有误. 比如:2011-0 ...
- 简单快捷计算本月第一天星期几、本月有多少天、上一个月的最后一天是几号
今天偶然在vue2/nodejs视频中看到一个计算"本月第一天星期几.本月有多少天.上一个月的最后一天是几号" 最简便最快捷的方法. 如果自己写,就很容易要判断闰年问题,那就非常复 ...
- 查询一个表中一个字段相同的数据_最实用MySQL 查询当天、本周,本月、上一个月的数据...
MySQL 查询当天.本周,本月.上一个月的数据 mysql查询当天的所有信息: SELECT * FROM 表名 WHERE year(时间字段名)=year(now()) and month(时间 ...
- 根据指定日期获取上一个月
根据指定日期获取上一个月 看过不少类似文章,根据一个日期,要取得相应的上一个月的值,则利用Calendar的api:get(Calendar.MONTH) - 1)来算. 思路是对的,但这个api有坑 ...
- php 上一个月的开始和结束,php获取上一个月的开始与结束时间遇到的问题
改正之前: $_lastMonthStart = date('Y-m-1 00:00:00', strtotime("-1 month")); $_lastMonthEnd = d ...
- Android开发之Java和Calendar日期上一年,上一个月,前一天,前一周的方法
公司做的项目要求选择日期可以选择上一个月的,很简单,但是涉及到临界日期,例如跨年 直接的问题从2019.1.1往前一个月那就不简单了,于是找到相关方法自己尝试下.理解出了两个往前一年的区别 看下图: ...
- js获取上一个月、下一个月
/*** 获取上一个月** @date 格式为yyyy-mm-dd的日期,如:2014-01-25*/function getPreMonth(date) {var arr = date.split( ...
- 获取当前日期的上一个月和后三个月。
import datetime from dateutil.relativedelta import relativedelta #获取当前日期的上一个月和后一个月 print(datetime.da ...
- Calendar类获取当前时间上一个月,下一个月,当月的最后一天等的处理方法
Calendar cal = Calendar.getInstance();//获取一个Calendar对象 cal.setTime(new Date() ); cal.add(Calendar.MO ...
最新文章
- 第九章 大网高级 ASA 高级设置
- navicat for mysql 怎么连接远程数据库服务器
- 给python初学者的最好练手项目-Python的练手项目有哪些值得推荐?(知乎转载)...
- macOS Big Sur Wi-Fi 网络无法连接如何解决
- ios开发ocr识别_传统图像处理技术,ocr识别技术算法
- 因非法扣押物资 华为向伟创力发律师函索赔数亿元
- 实物贴图风格拟物图标素材,高逼格即显
- RabbitMQ WEB管理端
- 【车牌识别】基于matlab形态学车牌识别【含Matlab源码 1155期】
- Autodesk 3DSMax 2014 安装注册说明
- SSIS ODBC方式连接mysql数据库、oracle数据库
- C语言 梯形面积
- 西部数据移动硬盘哪个型号好_西数移动硬盘哪个系列好?西部数据Blue系列3D进阶高速蓝盘怎么样,质量好吗?...
- 【.Net码农】ListT 类
- 基于sammy的前端mvc框架
- 在线编辑、在线预览、在线转换,基于wps.js + java + react / vue,无需任何插件,零安装
- 计算机修改人类记忆曲线,艾宾浩斯遗忘曲线和费曼技巧
- 《历》·陕西帝王陵寝一览
- 修改elementUI的el-popconfirm 气泡确认框样式不起效果
- 大学物理实验报告2——数字示波器的使用
热门文章
- python错误代码40035_Python 创建XML
- RabbitMQ 消息确认机制 以及 原理解析
- 004_Vue按键修饰符
- 009_字符串内建函数
- 061_html字符实体
- cnn stride and padding_CNN中的stride、kernel、padding计算
- 集合框架源码分析三(实现类篇ArrayList,LinkedList,HashMap)
- Android数据库高手秘籍
- 机器学习视觉图像算法工程师--面试笔试--常考知识点乱找总结
- mysql函数数组参数_MYSQL数组聚合函数,如PostgreSQL array_agg