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 相关文章推荐
Content-type 的说明
Oct 09 PHP
PHP服务器页面间跳转实现方法
Aug 02 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
Oct 15 PHP
PHP、Java des加密解密实例
Apr 27 PHP
php实现CSV文件导入和导出
Oct 24 PHP
win平台安装配置Nginx+php+mysql 环境
Jan 12 PHP
php实现图片上传、剪切功能
May 07 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
Jun 13 PHP
Yii2单元测试用法示例
Nov 12 PHP
php7 安装yar 生成docker镜像
May 09 PHP
PHP实现生成推广海报的方法详解
Mar 14 PHP
PHP命名空间(namespace)原理与用法详解
Dec 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防注入代码
2010/04/07 PHP
PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
2014/08/18 PHP
PHP实现图片上传并压缩
2015/12/22 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
2020/11/10 PHP
用window.location.href实现刷新另个框架页面
2007/03/07 Javascript
ext 代码生成器
2009/08/07 Javascript
用js一次改变多个input的readonly属性值的方法
2014/06/11 Javascript
js判断手机和pc端选择不同执行事件的方法
2015/01/30 Javascript
Javascript实现快速排序(Quicksort)的算法详解
2015/09/06 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
JavaScript仿微信打飞机游戏
2020/07/05 Javascript
Javascript实现的StopWatch功能示例
2017/06/13 Javascript
JavaScript实现职责链模式概述
2018/01/25 Javascript
Vue实现搜索结果高亮显示关键字
2019/05/28 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
[02:19]DOTA2女子战队FOX视频专访:希望更多美眉一起加入
2013/10/15 DOTA
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
linux下安装easy_install的方法
2013/02/10 Python
python进阶教程之循环对象
2014/08/30 Python
Python中实现结构相似的函数调用方法
2015/03/10 Python
Windows系统下多版本pip的共存问题详解
2017/10/10 Python
python中@property和property函数常见使用方法示例
2019/10/21 Python
PyQt使用QPropertyAnimation开发简单动画
2020/04/02 Python
python 异步async库的使用说明
2020/05/04 Python
python 实现PIL模块在图片画线写字
2020/05/16 Python
html5构建触屏网站之touch事件介绍
2013/01/07 HTML / CSS
Topman美国官网:英国著名的国际平价时尚男装品牌
2017/12/22 全球购物
Harrods美国:英国最大的百货公司
2018/11/04 全球购物
联想阿根廷官方网站:Lenovo Argentina
2019/10/14 全球购物
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
保护环境建议书100字
2014/05/13 职场文书
个性发展自我评价2015
2015/03/09 职场文书
Python Django获取URL中的数据详解
2021/11/01 Python
nginx共享内存的机制详解
2022/03/21 Servers
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫