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与SQL注入攻击[三]
Apr 17 PHP
修改Zend引擎实现PHP源码加密的原理及实践
Apr 14 PHP
PHP开启gzip页面压缩实例代码
Mar 11 PHP
php和javascript之间变量的传递实现代码
Dec 19 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
May 10 PHP
php中FTP函数ftp_connect、ftp_login与ftp_chmod用法
Nov 18 PHP
php动态函数调用方法
May 21 PHP
分享50个提高PHP执行效率的技巧
Dec 26 PHP
CentOS 上搭建 PHP7 开发测试环境
Feb 26 PHP
PC端微信扫码支付成功之后自动跳转php版代码
Jul 07 PHP
thinkphp分页集成实例
Jul 24 PHP
PHP实现微信小程序人脸识别刷脸登录功能
May 24 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抓取https的内容的代码
2010/04/06 PHP
PHP-Fcgi下PHP的执行时间设置方法
2013/08/02 PHP
Javascript实例教程(19) 使用HoTMetal(3)
2006/12/23 Javascript
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
jquery入门必备的基本认识及实例(整理)
2013/06/24 Javascript
js如何取消事件冒泡
2013/09/23 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
JavaScript Function函数类型介绍
2015/04/08 Javascript
AngularJS 模块详解及简单实例
2016/07/28 Javascript
jquery层级选择器的实现(匹配后代元素div)
2016/09/05 Javascript
利用React-router+Webpack快速构建react程序
2016/10/27 Javascript
js实现图片切换(动画版)
2016/12/25 Javascript
require.js中的define函数详解
2017/07/10 Javascript
Vue响应式原理深入解析及注意事项
2017/12/11 Javascript
Vuex 入门教程
2018/01/10 Javascript
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
浅谈Webpack下多环境配置的思路
2018/06/27 Javascript
vue在手机中通过本机IP地址访问webApp的方法
2018/08/15 Javascript
原生JS实现手动轮播图效果实例代码
2018/11/22 Javascript
环形加载进度条封装(Vue插件版和原生js版)
2019/12/04 Javascript
nodejs各种姿势断点调试的方法
2020/06/18 NodeJs
[07:48]DOTA2上海特级锦标赛主赛事首日RECAP
2016/03/04 DOTA
Python基础之getpass模块详细介绍
2017/08/10 Python
修复 Django migration 时遇到的问题解决
2018/06/14 Python
python使用__slots__让你的代码更加节省内存
2018/09/05 Python
Python简单基础小程序的实例代码
2019/04/28 Python
在Django的View中使用asyncio的方法
2019/07/12 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
如何提高python 中for循环的效率
2020/04/15 Python
解决阿里云邮件发送不能使用25端口问题
2020/08/07 Python
Myprotein西班牙官网:欧洲第一大运动营养品牌
2020/02/24 全球购物
党校培训自我鉴定范文
2014/03/20 职场文书
2014基建处领导班子“四风”对照检查材料思想汇报
2014/10/04 职场文书
2015年办公室个人工作总结
2015/04/20 职场文书
python中__slots__节约内存的具体做法
2021/07/04 Python