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 相关文章推荐
PHP4和PHP5共存于一系统
Nov 17 PHP
Windows PHP5和Apache的安装与配置
Jun 08 PHP
PHP has encountered an Access Violation at 7C94BD02解决方法
Aug 24 PHP
PHP 开发环境配置(测试开发环境)
Apr 28 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
Aug 31 PHP
php设置静态内容缓存时间的方法
Dec 01 PHP
PHP获取当前相对于域名目录的方法
Jun 26 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
Mar 15 PHP
PHP树-不需要递归的实现方法
Jun 21 PHP
php中array_column函数简单实现方法
Jul 11 PHP
PHP等比例压缩图片的实例代码
Jul 26 PHP
Laravel find in set排序实例
Oct 09 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中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
2014/04/24 PHP
thinkphp3.2.2实现生成多张缩略图的方法
2014/12/19 PHP
PHP远程调试之XDEBUG
2015/12/29 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
jQuery学习笔记之jQuery的事件
2010/12/22 Javascript
JS或jQuery获取ASP.NET服务器控件ID的方法
2015/06/08 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
2015/06/12 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
2016/06/13 Javascript
js Canvas实现的日历时钟案例分享
2016/12/25 Javascript
ajax +NodeJS 实现图片上传实例
2017/06/06 NodeJs
Vue+Element使用富文本编辑器的示例代码
2017/08/14 Javascript
详解swipe使用及竖屏页面滚动方法
2018/06/28 Javascript
微信小程序开发之tabbar图标和颜色的实现
2018/10/17 Javascript
jQuery实现当拉动滚动条到底部加载数据的方法分析
2019/01/24 jQuery
详解js中let与var声明变量的区别
2020/04/05 Javascript
layUI实现前端分页和后端分页
2019/07/27 Javascript
Vue2.x-使用防抖以及节流的示例
2021/03/02 Vue.js
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
详解Python中的序列化与反序列化的使用
2015/06/30 Python
从头学Python之编写可执行的.py文件
2017/11/28 Python
python实现简易内存监控
2018/06/21 Python
Django中使用Celery的方法示例
2018/11/29 Python
Python初学者常见错误详解
2019/07/02 Python
在django模板中实现超链接配置
2019/08/21 Python
Python文件操作基础流程解析
2020/03/19 Python
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
澳大利亚在线床零售商:Bedworks
2020/09/01 全球购物
linux面试题参考答案(5)
2016/11/05 面试题
精通CAD能手自荐书
2014/01/31 职场文书
经理助理岗位职责
2014/03/05 职场文书
法制宣传标语集锦
2014/06/25 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
优秀班组事迹材料
2014/12/24 职场文书
2015年挂职干部工作总结
2015/05/14 职场文书
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫