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中文本数据翻页(留言本翻页)
Oct 09 PHP
PHP类的使用 实例代码讲解
Dec 28 PHP
PHP查询MySQL大量数据的时候内存占用分析
Jul 22 PHP
PHP获取MAC地址的函数代码
Sep 11 PHP
微信营销平台系统?刮刮乐的开发
Jun 10 PHP
destoon之一键登录设置
Jun 21 PHP
php操作xml入门之xml基本介绍及xml标签元素
Jan 23 PHP
基于php的CMS中展示文章类实例分析
Jun 18 PHP
微信支付开发发货通知实例
Jul 12 PHP
php安装dblib扩展,连接mssql的具体步骤
Mar 02 PHP
PHP中的empty、isset、isnull的区别与使用实例
Mar 22 PHP
Laravel重定向,a链接跳转,控制器跳转示例
Oct 22 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 Image Resize图片大小调整的函数代码
2011/01/17 PHP
PHP session有效期session.gc_maxlifetime
2011/04/20 PHP
PHP写的求多项式导数的函数代码
2012/07/04 PHP
PHP实现对站点内容外部链接的过滤方法
2014/09/10 PHP
Display SQL Server Login Mode
2007/06/21 Javascript
JavaScript的类型简单说明
2010/09/03 Javascript
JS制作手机端自适应缩放显示
2015/06/11 Javascript
Jsonp post 跨域方案
2015/07/06 Javascript
理解javascript定时器中的setTimeout与setInterval
2016/02/23 Javascript
Nodejs如何搭建Web服务器
2016/03/28 NodeJs
js严格模式总结(分享)
2016/08/22 Javascript
理解javascript中的闭包
2017/01/11 Javascript
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
2017/03/28 NodeJs
ES6新特性五:Set与Map的数据结构实例分析
2017/04/21 Javascript
vue 虚拟dom的patch源码分析
2018/03/01 Javascript
vue-cli开发环境实现跨域请求的方法
2018/04/07 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
vue组件中的样式属性scoped实例详解
2018/10/30 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)
2019/09/19 Javascript
python requests爬取高德地图数据的实例
2018/11/10 Python
Python基本数据结构之字典类型dict用法分析
2019/06/08 Python
Puppeteer使用示例详解
2019/06/20 Python
解决Pycharm的项目目录突然消失的问题
2020/01/20 Python
Tensorflow 多线程与多进程数据加载实例
2020/02/05 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
Html5中的桌面通知Notification的实现
2018/09/25 HTML / CSS
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
大学生志愿者感言
2014/01/15 职场文书
医学类个人求职信范文
2014/02/05 职场文书
教师新年寄语
2014/04/03 职场文书
群众路线四风对照检查材料
2014/11/04 职场文书
商场营业员岗位职责
2015/04/14 职场文书
交通事故被告代理词
2015/05/23 职场文书
sql注入教程之类型以及提交注入
2021/08/02 MySQL
java如何实现socket连接方法封装
2021/09/25 Java/Android