PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】


Posted in PHP onDecember 21, 2018

本文实例讲述了PHP时间日期增减操作。分享给大家供大家参考,具体如下:

时间函数是PHP里面的日常函数,时间的默认时期,今天、昨天、明天 、上一周、下一周,本周开始时间和结束时间;本月开始时间结束时间;上月开始时间结束时间,指定日期的周一和周日等等方法。

date_default_timezone_set('PRC'); //默认时区
//当前的时间增加5天
$date1 = "2018-12-21";
echo date('Y-m-d',strtotime("$date1 +5 day")); //输出结果:2018-12-26
//相应地,要增加月,年,将day改成month或year即可
//+++ 今天、昨天、明天 、上一周、下一周 +++++++++
echo "今天:",date("Y-m-d",time()),"<hr>";
echo "昨天:",date("Y-m-d",strtotime("-1 day")), "<hr>";
echo "明天:",date("Y-m-d",strtotime("+1 day")), "<hr>";
echo "一周后:",date("Y-m-d",strtotime("+1 week")), "<hr>";
echo "一周零两天四小时两秒后:",date("Y-m-d G:H:s",strtotime("+1 week 2 days 4 hours 2 seconds")), "<hr>";
echo "下个星期四:",date("Y-m-d",strtotime("next Thursday")), "<hr>";
echo "上个周一:".date("Y-m-d",strtotime("last Monday"))."<hr>";
echo "一个月前:".date("Y-m-d",strtotime("last month"))."<hr>";
echo "一个月后:".date("Y-m-d",strtotime("+1 month"))."<hr>";
echo "十年后:".date("Y-m-d",strtotime("+10 year"))."<hr>";

运行结果:

2018-12-26今天:2018-12-21
--------------------------------------------------------------------------------
昨天:2018-12-20
--------------------------------------------------------------------------------
明天:2018-12-22
--------------------------------------------------------------------------------
一周后:2018-12-28
--------------------------------------------------------------------------------
一周零两天四小时两秒后:2018-12-30 15:15:46
--------------------------------------------------------------------------------
下个星期四:2018-12-27
--------------------------------------------------------------------------------
上个周一:2018-12-17
--------------------------------------------------------------------------------
一个月前:2018-11-21
--------------------------------------------------------------------------------
一个月后:2019-01-21
--------------------------------------------------------------------------------
十年后:2028-12-21
--------------------------------------------------------------------------------

php 本周开始时间和结束时间;本月开始时间结束时间;上月开始时间结束时间

date_default_timezone_set('PRC'); //默认时区
/**
* 功能:取得给定日期所在周的开始日期和结束日期
* 参数:$gdate 日期,默认为当天,格式:YYYY-MM-DD
* $first 一周以星期一还是星期天开始,0为星期天,1为星期一
* 返回:数组array("开始日期", "结束日期");
*
*/
function aweek($gdate = "", $first = 0){
  if(!$gdate) $gdate = date("Y-m-d");
  $w = date("w", strtotime($gdate));//取得一周的第几天,星期天开始0-6
  $dn = $w ? $w - $first : 6;//要减去的天数
  //本周开始日期
  $st = date("Y-m-d", strtotime("$gdate -".$dn." days"));
  //本周结束日期
  $en = date("Y-m-d", strtotime("$st +6 days"));
  //上周开始日期
  $last_st = date('Y-m-d',strtotime("$st - 7 days"));
  //上周结束日期
  $last_en = date('Y-m-d',strtotime("$st - 1 days"));
  return array($st, $en,$last_st,$last_en);//返回开始和结束日期
}
echo implode("|", aweek("", 1)).'<br />';
//echo date("Y-m-d",strtotime("time()"));
echo '本周第一天(星期日为一周开始):'.date('Y-m-d', time()-86400*date('w')).'<hr>';
echo '本周第一天(星期一为一周开始):'.date('Y-m-d', time()-86400*date('w')+(date('w')>0?86400:-6*86400)).'<hr>';
echo '本月第一天:'.date('Y-m-d', mktime(0,0,0,date('m'),1,date('Y'))).'<hr>';
echo '本月最后一天:'.date('Y-m-d', mktime(0,0,0,date('m'),date('t'),date('Y'))).'<hr>';
//上个月的开始日期
$m = date('Y-m-d', mktime(0,0,0,date('m')-1,1,date('Y')));
//上个月共多少天
$t = date('t',strtotime("$m"));
echo '上月第一天:'.date('Y-m-d', mktime(0,0,0,date('m')-1,1,date('Y'))).'<hr>';
echo '上月最后一天:'.date('Y-m-d', mktime(0,0,0,date('m')-1,$t,date('Y'))).'<hr>';

运行结果:

2018-12-17|2018-12-23|2018-12-10|2018-12-16
本周第一天(星期日为一周开始):2018-12-16
--------------------------------------------------------------------------------
本周第一天(星期一为一周开始):2018-12-17
--------------------------------------------------------------------------------
本月第一天:2018-12-01
--------------------------------------------------------------------------------
本月最后一天:2018-12-31
--------------------------------------------------------------------------------
上月第一天:2018-11-01
--------------------------------------------------------------------------------
上月最后一天:2018-11-30
--------------------------------------------------------------------------------

//PHP手册上有一个这个方法,用来返回指定日期的周一和周日
function get_week_range($week, $year){
  $timestamp = mktime(1,0,0,1,1,$year);
  $firstday = date("N",$timestamp);
  if($firstday >4){
    $firstweek = strtotime('+'.(8-$firstday).' days', $timestamp);
  }else{
    $firstweek = strtotime('-'.($firstday-1).' days', $timestamp);
  }
  $monday = strtotime('+'.($week - 1).' week', $firstweek);
  $sunday = strtotime('+6 days', $monday);
  $start = date("Y-m-d", $monday);
  $end = date("Y-m-d", $sunday);
  return array($start, $end);
}
//strtotime获取本周第一天和最后一天方法的BUG
//PHP手册上有一个这个方法,用来返回指定日期的周一和周日
function get_week_range2($week, $year){
  $timestamp = mktime(1,0,0,1,1,$year);
  $firstday = date("N",$timestamp);
  if($firstday >4){
    $firstweek = strtotime('+'.(8-$firstday).' days', $timestamp);
  }else{
    $firstweek = strtotime('-'.($firstday-1).' days', $timestamp);
  }
  $monday = strtotime('+'.($week - 1).' week', $firstweek);
  $sunday = strtotime('+6 days', $monday);
  $start = date("Y-m-d", $monday);
  $end = date("Y-m-d", $sunday);
  return array($start, $end);
}

但在跨年的时候使用会有问题

例如2011年的12月31日周六和2012年1月1日周日,拿到的周一和周日完全不同

2011年12月31日拿合到的周一和周日分别对应
2011-12-26
2012-01-01

但2012年1月1日拿 到的周一和周日分别对应

2012-01-02
2012-01-04

原因为传进去的方法的周为第53周,但是年为2011年,所以认为2011的第53周,所以计算有误,解决方法为,

如果周为大于10(因为一月个月不可能有10周),且月份为1的时候,将年减1处理

if(date('m',$last_week_time) == '01' and $tmp_last_week > 10){
  $last_week_year--;
}
PHP 相关文章推荐
php巧获服务器端信息
Dec 06 PHP
使用php get_headers 判断URL是否有效的解决办法
Apr 27 PHP
php获取远程图片体积大小的实例
Nov 12 PHP
PHP SPL使用方法和他的威力
Nov 12 PHP
ThinkPHP CURD方法之where方法详解
Jun 18 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
Nov 18 PHP
php绘制一个矩形的方法
Jan 24 PHP
PHP中余数、取余的妙用
Jun 29 PHP
非常有用的9个PHP代码片段
Apr 06 PHP
php简单实现批量上传图片的方法
May 09 PHP
Nginx环境下PHP flush失效的解决方法
Oct 19 PHP
PHP7创建销毁session的实例方法
Feb 03 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
Dec 21 #PHP
PHP支付宝当面付2.0代码
Dec 21 #PHP
php json转换相关知识(小结)
Dec 21 #PHP
PHP后期静态绑定实例浅析
Dec 21 #PHP
PHP后期静态绑定之self::限制实例分析
Dec 21 #PHP
PHP类与对象后期静态绑定操作实例详解
Dec 20 #PHP
PHP设计模式之模板方法模式实例浅析
Dec 20 #PHP
You might like
用php获取本周,上周,本月,上月,本季度日期的代码
2009/08/05 PHP
Laravel学习教程之路由模块
2017/08/18 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
javascript不同页面传值的改进版
2008/09/30 Javascript
基于jquery.Jcrop的头像编辑器
2010/03/01 Javascript
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
两个Javascript小tip资料
2010/11/23 Javascript
XML文件转化成NSData对象的方法
2015/08/12 Javascript
angularjs实现的购物金额计算工具示例
2018/05/08 Javascript
ES7之Async/await的使用详解
2019/03/28 Javascript
在Vuex中Mutations修改状态操作
2020/07/24 Javascript
[03:49]DOTA2英雄基础教程 光之守卫
2014/01/14 DOTA
python中的yield使用方法
2014/02/11 Python
Python正则表达式匹配ip地址实例
2014/10/09 Python
python中__call__方法示例分析
2014/10/11 Python
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
python异常和文件处理机制详解
2016/07/19 Python
python实现俄罗斯方块
2018/06/26 Python
Python类中的魔法方法之 __slots__原理解析
2019/08/26 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
2019/09/16 Python
支持IE8的纯css3开发的响应式设计动画菜单教程
2014/11/05 HTML / CSS
从一次项目重构说起CSS3自定义变量在项目的使用方法
2021/03/01 HTML / CSS
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
萌新HTML5 入门指南(二)
2020/11/09 HTML / CSS
成人大专自我鉴定范文
2013/10/19 职场文书
会计毕业生自我鉴定
2013/11/04 职场文书
药店主任岗位责任制
2014/02/10 职场文书
创建服务型党组织实施方案
2014/02/25 职场文书
委托书如何写
2014/08/30 职场文书
2016新年感言
2015/08/03 职场文书
关于分班的感言
2015/08/04 职场文书
2016新教师培训心得体会范文
2016/01/08 职场文书
高中生物教学反思
2016/02/20 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书
Python 中 Shutil 模块详情
2021/11/11 Python