PHP使用strtotime获取上个月、下个月、本月的日期


Posted in PHP onDecember 30, 2015

今天写程序的时候,突然发现了很早以前写的获取月份天数的函数,经典的switch版,但是获得上月天数的时候,我只是把月份-1了,估计当时太困了吧,再看到有种毛骨悚然的感觉,本来是想再处理一下的,但是一想肯定还有什么超方便的方法,于是找到了下面这个版本,做了一点小修改。

获取本月日期:

function getMonth($date){
   $firstday = date("Y-m-01",strtotime($date));
   $lastday = date("Y-m-d",strtotime("$firstday +1 month -1 day"));
   return array($firstday,$lastday);
 }

$firstday是月份的第一天,假如$date是2014-2这样的话,$firstday就会是2014-02-01,然后根据$firstday加一个月就是2014-03-01,再减一天就是2014-02-28,用date()和strtotime()真是太方便了。

获取上月日期:

function getlastMonthDays($date){
   $timestamp=strtotime($date);
   $firstday=date('Y-m-01',strtotime(date('Y',$timestamp).'-'.(date('m',$timestamp)-1).'-01'));
   $lastday=date('Y-m-d',strtotime("$firstday +1 month -1 day"));
   return array($firstday,$lastday);
 }

上月日期需要先获取一个时间戳,然后在月份上-1就OK了,超智能的date()会把2014-0-1这种东西转换成2013-12-01,太爽了。

获取下月日期:

function getNextMonthDays($date){
   $timestamp=strtotime($date);
   $arr=getdate($timestamp);
   if($arr['mon'] == 12){
     $year=$arr['year'] +1;
     $month=$arr['mon'] -11;
     $firstday=$year.'-0'.$month.'-01';
     $lastday=date('Y-m-d',strtotime("$firstday +1 month -1 day"));
   }else{
     $firstday=date('Y-m-01',strtotime(date('Y',$timestamp).'-'.(date('m',$timestamp)+1).'-01'));
     $lastday=date('Y-m-d',strtotime("$firstday +1 month -1 day"));
   }
   return array($firstday,$lastday);
 }

下月日期的代码看起来比较长一点,因为date()转不了类似2014-13-01这种东西,它会直接回到1970,所以前面需要处理一下12月的问题,除了12月就直接月份+1就OK啦。

总得来说,还是很方便的,日期函数太强大了。

最后简单介绍下strtotime的用法

获取指定日期的unix时间戳

strtotime("2009-1-22") 示例如下:

echo strtotime("2009-1-22")

结果:1232553600

说明:返回2009年1月22日0点0分0秒时间戳

获取英文文本日期时间

示例如下:

便于比较,使用date将当时间戳与指定时间戳转换成系统时间

(1)打印明天此时的时间戳strtotime("+1 day")

当前时间:

echo date("Y-m-d H:i:s",time())

结果:2009-01-22 09:40:25

指定时间:

echo date("Y-m-d H:i:s",strtotime("+1 day"))

结果:2009-01-23 09:40:25

(2)打印昨天此时的时间戳strtotime("-1 day")

当前时间:

echo date("Y-m-d H:i:s",time())

结果:2009-01-22 09:40:25

指定时间:

echo date("Y-m-d H:i:s",strtotime("-1 day"))

结果:2009-01-21 09:40:25

(3)打印下个星期此时的时间戳strtotime("+1 week")

当前时间:

echo date("Y-m-d H:i:s",time())

结果:2009-01-22 09:40:25

指定时间:

echo date("Y-m-d H:i:s",strtotime("+1 week"))

结果:2009-01-29 09:40:25

(4)打印上个星期此时的时间戳strtotime("-1 week")

当前时间:

echo date("Y-m-d H:i:s",time())

结果:2009-01-22 09:40:25

指定时间:

echo date("Y-m-d H:i:s",strtotime("-1 week"))

结果:2009-01-15 09:40:25

(5)打印指定下星期几的时间戳strtotime("next Thursday")

当前时间:

echo date("Y-m-d H:i:s",time())

结果:2009-01-22 09:40:25

指定时间:

echo date("Y-m-d H:i:s",strtotime("next Thursday"))

结果:2009-01-29 00:00:00

(6)打印指定上星期几的时间戳strtotime("last Thursday")

当前时间:

echo date("Y-m-d H:i:s",time())

结果:2009-01-22 09:40:25

指定时间:

echo date("Y-m-d H:i:s",strtotime("last Thursday"))

结果:2009-01-15 00:00:00

以上示例可知,strtotime能将任何英文文本的日期时间描述解析为Unix时间戳,我们结合mktime()或date()格式化日期时间获取指定的时间戳,实现所需要的日期时间。

PHP 相关文章推荐
Smarty模板快速入门
Jan 04 PHP
Blitz templates 最快的PHP模板引擎
Apr 06 PHP
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
Aug 01 PHP
Smarty中常用变量操作符汇总
Oct 27 PHP
抛弃 PHP 代价太高
Apr 26 PHP
PHP实现递归目录的5种方法
Oct 27 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
PHP使用PDO抽象层获取查询结果的方法示例
May 10 PHP
PHP的curl函数的用法总结
Feb 14 PHP
Laravel 修改默认日志文件名称和位置的例子
Oct 17 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
Mar 16 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
Dec 29 PHP
分享PHP守护进程类
Dec 30 #PHP
如何写php守护进程(Daemon)
Dec 30 #PHP
PHP汉字转换拼音的函数代码
Dec 30 #PHP
使用PHP如何实现高效安全的ftp服务器(二)
Dec 30 #PHP
php获取当前页面完整URL地址
Dec 30 #PHP
详解WordPress中添加和执行动作的函数使用方法
Dec 29 #PHP
详解WordPress中创建和添加过滤器的相关PHP函数
Dec 29 #PHP
You might like
PHP抓取及分析网页的方法详解
2016/04/26 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
2019/09/08 PHP
浅谈javascript中的作用域
2012/04/07 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
用于deeplink的js方法(判断手机是否安装app)
2014/04/02 Javascript
JQuery以JSON方式提交数据到服务端示例代码
2014/05/05 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
2016/05/10 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
js实现的简练高效拖拽功能示例
2016/12/21 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
基于jQuery封装的分页组件
2017/06/26 jQuery
详谈for循环里面的break和continue语句
2017/07/20 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
2017/10/25 Javascript
js捆绑TypeScript声明文件的方法教程
2018/04/13 Javascript
Vue CLI3.0中使用jQuery和Bootstrap的方法
2019/02/28 jQuery
微信小程序--特定区域滚动到顶部时固定的方法
2019/04/28 Javascript
Vue仿微信app页面跳转动画效果
2019/08/21 Javascript
Vue父子传递实例讲解
2020/02/14 Javascript
[36:33]Ti4 循环赛第四日 附加赛NEWBEE vs Mouz
2014/07/13 DOTA
Python实现的Kmeans++算法实例
2014/04/26 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
django和flask哪个值得研究学习
2020/07/31 Python
美国标志性加大尺码时装品牌:Ashley Stewart
2016/12/15 全球购物
大四学生思想汇报
2014/01/13 职场文书
七年级政治教学反思
2014/02/03 职场文书
校园联欢晚会主持词
2014/03/17 职场文书
庆元旦文艺演出主持词
2014/03/27 职场文书
业务员工作态度散漫检讨书
2014/11/02 职场文书
学校实习推荐信
2015/03/27 职场文书
污水处理保证书
2015/05/09 职场文书
结婚司仪主持词
2015/06/29 职场文书
中学图书馆工作总结
2015/08/11 职场文书
python turtle绘图命令及案例
2021/11/23 Python
《总之就是很可爱》新作短篇动画《总之就是很可爱~制服~》将于2022年夏天播出
2022/04/07 日漫