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 相关文章推荐
PHP学习之PHP变量
Oct 09 PHP
PHP+MYSQL会员系统的登陆即权限判断实现代码
Sep 23 PHP
PHP父类调用子类方法的代码例子
Apr 09 PHP
C# WinForm中实现快捷键自定义设置实例
Jan 23 PHP
PHP经典面试题集锦
Mar 19 PHP
PHP简单创建压缩图的方法
Aug 24 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
Mar 12 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
Aug 07 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
Oct 14 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
Jun 22 PHP
php操作redis数据库常见方法实例总结
Feb 20 PHP
如何在PHP中读写文件
Sep 07 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输出数组中重名的元素的几种处理方法
2012/09/05 PHP
解析PHP中的unset究竟会不会释放内存
2013/07/18 PHP
php防止网站被攻击的应急代码
2015/10/21 PHP
php扩展开发入门demo示例
2019/09/23 PHP
CLASS_CONFUSION JS混淆 全源码
2007/12/12 Javascript
8个超棒的学习 jQuery 的网站 推荐收藏
2011/04/02 Javascript
jQuery参数列表集合
2011/04/06 Javascript
通过js获取div的background-image属性
2013/10/15 Javascript
jQuery绑定事件不执行但alert后可以正常执行
2014/06/03 Javascript
使用VS开发 Node.js指南
2015/01/06 Javascript
JS实现简洁、全兼容的拖动层实例
2015/05/13 Javascript
JavaScript中的toUTCString()方法使用详解
2015/06/12 Javascript
第一章之初识Bootstrap
2016/04/25 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
2016/05/17 Javascript
jQuery插件FusionCharts绘制的2D帕累托图效果示例【附demo源码】
2017/03/28 jQuery
react-router JS 控制路由跳转实例
2017/06/15 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
JavaScript实现单例模式实例分享
2017/12/22 Javascript
JavaScript轮播停留效果的实现思路
2018/05/24 Javascript
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
python交互式图形编程实例(一)
2017/11/17 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
python实现音乐下载器
2018/04/15 Python
CSS3教程(4):网页边框和网页文字阴影
2009/04/02 HTML / CSS
css3的transition属性详解
2014/12/15 HTML / CSS
HTML5 localStorage使用总结
2017/02/22 HTML / CSS
局部内部类是否可以访问非final变量?
2013/04/20 面试题
值传递还是引用传递
2015/02/08 面试题
基层党员公开承诺书
2014/05/29 职场文书
社区党员志愿服务活动方案
2014/08/18 职场文书
离职证明范本(5篇)
2014/09/19 职场文书
医院员工辞职信范文
2015/05/12 职场文书
南极大冒险观后感
2015/06/05 职场文书
人与自然的观后感
2015/06/18 职场文书
环保证明
2015/06/23 职场文书