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 相关文章推荐
第十三节 对象串行化 [13]
Oct 09 PHP
推荐个功能齐全的发送PHP邮件类
Jan 03 PHP
浅析PHP原理之变量(Variables inside PHP)
Aug 09 PHP
使用CodeIgniter的类库做图片上传
Jun 12 PHP
php设计模式之简单工厂模式详解
Sep 04 PHP
php自动更新版权信息显示的方法
Jun 19 PHP
在PHP程序中使用Rust扩展的方法
Jul 03 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
Dec 31 PHP
php session实现多级目录存放实现代码
Feb 03 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
Nov 05 PHP
PHP实现微信申请退款功能
Oct 01 PHP
PHP echo()函数讲解
Feb 15 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中利用wsdl创建标准webservice的实现代码
2011/12/07 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
2015/03/18 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
2017/05/05 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
ExtJs扩展之GroupPropertyGrid代码
2010/03/05 Javascript
javascript开发随笔一 preventDefault的必要
2011/11/25 Javascript
javascript学习笔记(十二) RegExp类型介绍
2012/06/20 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
2015/08/11 Javascript
JS实现重新加载当前页面或者父页面的几种方法
2016/11/30 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
2017/01/04 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
js中url对象化管理分析
2017/12/29 Javascript
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
Vue页面跳转动画效果的实现方法
2018/09/23 Javascript
vue-router实现编程式导航的代码实例
2019/01/19 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
用实例说明python的*args和**kwargs用法
2013/11/01 Python
python实现人人网登录示例分享
2014/01/19 Python
Python的时间模块datetime详解
2017/04/17 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
python图形开发GUI库pyqt5的基本使用方法详解
2020/02/14 Python
python中安装django模块的方法
2020/03/12 Python
Python多进程编程常用方法解析
2020/03/26 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
French Connection官网:女装、男装及家居用品
2019/03/18 全球购物
德国自行车商店:Tretwerk
2019/06/21 全球购物
什么是事务?为什么需要事务?
2012/01/09 面试题
AJAX都有哪些有点和缺点
2012/11/03 面试题
企业消防安全制度
2014/02/02 职场文书
同事吵架检讨书
2014/02/05 职场文书
政协调研汇报材料
2014/08/15 职场文书
教师节晚会主持词
2015/06/30 职场文书
三八妇女节致辞
2015/07/31 职场文书
Opencv中cv2.floodFill算法的使用
2021/06/18 Python
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android