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程序效率优化的一些策略小结
Jul 17 PHP
PHP文件读写操作之文件读取方法详解
Jan 13 PHP
php array的学习笔记
May 10 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
Oct 15 PHP
php实现mysql事务处理的方法
Dec 25 PHP
php获取百度收录、百度热词及百度快照的方法
Apr 02 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
Mar 03 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
Jun 12 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
Aug 01 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
Mar 14 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
Ajax+PHP实现的模拟进度条功能示例
Feb 11 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更新购物车数量(表单部分/PHP处理部分)
2013/05/03 PHP
使用PHP Socket写的POP3类
2013/10/30 PHP
Laravel 5框架学习之向视图传送数据
2015/04/08 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
Laravel使用支付宝进行支付的示例代码
2017/08/16 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
php连接sftp的作用以及实例代码
2019/09/23 PHP
jQuery 源码分析笔记(6) jQuery.data
2011/06/08 Javascript
JQuery魔力之$(&quot;tagName&quot;)与selector
2012/03/05 Javascript
JS图片根据鼠标滚动延时加载的实例代码
2013/07/13 Javascript
javascript结合canvas实现图片旋转效果
2015/05/03 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
ES6中非常实用的新特性介绍
2016/03/10 Javascript
基于javascript实现tab选项卡切换特效调试笔记
2016/03/30 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
2016/06/12 Javascript
input 禁止输入特殊字符的四种实现方式
2016/08/24 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
微信小程序 跳转方式总结
2017/04/20 Javascript
angularjs实现时间轴效果的示例代码
2017/11/29 Javascript
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
Javascript数组及类数组相关原理详解
2020/10/29 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
[01:10:58]KG vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
使用rpclib进行Python网络编程时的注释问题
2015/05/06 Python
Python模块搜索路径代码详解
2018/01/29 Python
将一个数的从第5位开始的7个数取出,其余位置0
2016/05/26 面试题
开放系统互连参考模型
2016/06/29 面试题
英语专业个人求职信范文
2014/02/01 职场文书
个人简历中自我评价
2014/02/11 职场文书
党的群众路线教育实践活动心得体会范文
2014/11/05 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
小学教师个人总结
2015/02/05 职场文书
廉政承诺书2015
2015/04/28 职场文书
新郎结婚感言
2015/07/31 职场文书