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 应用程序的安全 -- 不能违反的四条安全规则
Nov 26 PHP
PHP中的extract的作用分析
Apr 09 PHP
CodeIgniter CLI模式简介
Jun 17 PHP
PHP使用PDO操作数据库的乱码问题解决方法
Apr 08 PHP
CI框架数据库查询之join用法分析
May 18 PHP
php版微信小店调用api示例代码
Nov 12 PHP
PHP 网站修改默认访问文件的nginx配置
May 27 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
PHP环形链表实现方法示例
Sep 15 PHP
thinkphp框架类库扩展操作示例
Nov 26 PHP
laravel 框架执行流程与原理简单分析
Feb 01 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 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中__destruct与register_shutdown_function执行的先后顺序问题
2014/10/17 PHP
php实现encode64编码类实例
2015/03/24 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
Prototype使用指南之range.js
2007/01/10 Javascript
js 与或运算符 || &amp;&amp; 妙用
2009/12/09 Javascript
JavaScript 对象链式操作测试代码
2010/04/25 Javascript
js 获取、清空input type=&quot;file&quot;的值(示例代码)
2013/12/24 Javascript
cookie的secure属性详解
2015/04/08 Javascript
微信小程序自定义导航隐藏和显示功能
2017/06/13 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
js中split()方法得到的数组长度问题
2018/07/19 Javascript
使用koa-log4管理nodeJs日志笔记的使用方法
2018/11/30 NodeJs
vue与bootstrap实现简单用户信息添加删除功能
2019/02/15 Javascript
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
vue+element 模态框表格形式的可编辑表单实现
2019/06/07 Javascript
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
2020/07/30 Javascript
[01:45]DOTA2新英雄“神谕者”全方位展示
2014/11/21 DOTA
[00:10]DOTA2全国高校联赛速递
2018/05/30 DOTA
python快速排序代码实例
2013/11/21 Python
python中函数默认值使用注意点详解
2016/06/01 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
2017/09/11 Python
利用python实现微信头像加红色数字功能
2018/03/26 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
2019/02/12 Python
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
goodhealth官方海外旗舰店:新西兰国民营养师
2017/12/15 全球购物
Sephora丝芙兰马来西亚官方网站:国际化妆品购物
2018/03/15 全球购物
美国最大的烧烤架和户外生活用品专业零售商:Barbeques Galore
2021/01/09 全球购物
幼儿园开学家长寄语
2014/01/19 职场文书
法学毕业生自我鉴定
2014/01/31 职场文书
质量承诺书范文
2014/03/27 职场文书
《她是我的朋友》教学反思
2014/04/26 职场文书
酒店工程部岗位职责
2015/02/12 职场文书
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS
Python基础之条件语句详解
2021/06/16 Python
redis的list数据类型相关命令介绍及使用
2022/01/18 Redis
Mysql如何实现不存在则插入,存在则更新
2022/03/25 MySQL