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 相关文章推荐
理解PHP5中static和const关键字的区别
Mar 19 PHP
PHP面向对象法则
Feb 23 PHP
apache mysql php 源码编译使用方法
May 03 PHP
分享一下贝贝成长进度的php代码
Sep 14 PHP
解析php利用正则表达式解决采集内容排版的问题
Jun 20 PHP
浅析linux下apache服务器的配置和管理
Aug 10 PHP
使用php批量删除数据库下所有前缀为prefix_的表
Jun 09 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
Nov 19 PHP
php实现的微信红包算法分析(非官方)
Sep 25 PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
PHP基于递归算法解决兔子生兔子问题
May 11 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模板类代码
2008/09/07 PHP
php高级编程-函数-郑阿奇
2011/07/04 PHP
解析isset与is_null的区别
2013/08/09 PHP
PHP的AES加密算法完整实例
2016/07/20 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
24款非常有用的 jQuery 插件分享
2011/04/06 Javascript
利用JS实现浏览器的title闪烁
2013/07/08 Javascript
在父页面调用子页面的JS方法
2013/09/29 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
2016/08/10 Javascript
Node.js下自定义错误类型详解
2016/10/17 Javascript
js仿微信公众平台打标签功能
2017/04/08 Javascript
vue使用axios时关于this的指向问题详解
2017/12/22 Javascript
echarts鼠标覆盖高亮显示节点及关系名称详解
2018/03/17 Javascript
JS实现盒子跟着鼠标移动及键盘方向键控制盒子移动效果示例
2019/01/29 Javascript
Vue.js组件使用props传递数据的方法
2019/10/19 Javascript
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
python多线程http下载实现示例
2013/12/30 Python
python中的闭包用法实例详解
2015/05/05 Python
深入理解python中的闭包和装饰器
2016/06/12 Python
Python图形绘制操作之正弦曲线实现方法分析
2017/12/25 Python
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
安装python时MySQLdb报错的问题描述及解决方法
2018/03/20 Python
python实现的MySQL增删改查操作实例小结
2018/12/19 Python
pyqt5实现登录界面的模板
2020/05/30 Python
python简单验证码识别的实现方法
2019/05/10 Python
解决django后台样式丢失,css资源加载失败的问题
2019/06/11 Python
IntelliJ 中配置 Anaconda的过程图解
2020/06/01 Python
scrapy在python爬虫中搭建出错的解决方法
2020/11/22 Python
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
美国伴娘礼服商店:Evening Collective
2019/10/07 全球购物
2014离婚协议书范文两篇
2014/09/15 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
地道战观后感2000字
2015/06/04 职场文书
如何解决php-fpm启动不了问题
2021/11/17 PHP
HTML5之高度塌陷问题的解决
2022/06/01 HTML / CSS
java实现自定义时钟并实现走时功能
2022/06/21 Java/Android