找回密码
 立即注册
即日起,论坛关闭新用户注册和登录,论坛相关的贴子保留查阅和下载。获得授权后,有技术问题可联系微信 13199509559 一对一解决。 2024-3-12
查看: 3790|回复: 0

PHP时间日期操作增减(date strtotime) 加一天 加一月

206

主题

206

主题

206

主题

管理员

Rank: 9Rank: 9Rank: 9

积分
0
admin 发表于 2020-5-2 11:57:41 | 显示全部楼层 |阅读模式
时间函数是PHP里面的日常函数,时间的默认时期,今天、昨天、明天 、上一周、下一周,本周开始时间和结束时间;本月开始时间结束时间;上月开始时间结束时间,指定日期的周一和周日等等方法。


  1. date_default_timezone_set('PRC'); //默认时区

  2. //当前的时间增加5天

  3. $date1
  4. = "2014-11-11";

  5. echo
  6. date('Y-m-d',strtotime("$date1 +5 day"));  //输出结果:2014-11-16

  7. //相应地,要增加月,年,将day改成month或year即可





  8. //+++ 今天、昨天、明天 、上一周、下一周 +++++++++

  9. echo
  10. "今天:",date("Y-m-d",time()),"<hr>";

  11. echo
  12. "昨天:",date("Y-m-d",strtotime("-1 day")), "<hr>";

  13. echo
  14. "明天:",date("Y-m-d",strtotime("+1 day")), "<hr>";

  15. echo
  16. "一周后:",date("Y-m-d",strtotime("+1 week")), "<hr>";

  17. echo
  18. "一周零两天四小时两秒后:",date("Y-m-d G:H:s",strtotime("+1 week 2 days 4 hours 2 seconds")), "<hr>";

  19. echo
  20. "下个星期四:",date("Y-m-d",strtotime("next Thursday")), "<hr>";

  21. echo
  22. "上个周一:".date("Y-m-d",strtotime("last Monday"))."<hr>";

  23. echo
  24. "一个月前:".date("Y-m-d",strtotime("last month"))."<hr>";

  25. echo
  26. "一个月后:".date("Y-m-d",strtotime("+1 month"))."<hr>";

  27. echo
  28. "十年后:".date("Y-m-d",strtotime("+10 year"))."<hr>";
复制代码
php 本周开始时间和结束时间;本月开始时间结束时间;上月开始时间结束时间


  1. /**

  2. * 功能:取得给定日期所在周的开始日期和结束日期

  3. * 参数:$gdate 日期,默认为当天,格式:YYYY-MM-DD

  4. * $first 一周以星期一还是星期天开始,0为星期天,1为星期一

  5. * 返回:数组array("开始日期", "结束日期");

  6. *

  7. */



  8. function
  9. aweek($gdate
  10. = "", $first
  11. = 0){

  12.     if(!$gdate) $gdate
  13. = date("Y-m-d");

  14.     $w
  15. = date("w", strtotime($gdate));//取得一周的第几天,星期天开始0-6

  16.     $dn
  17. = $w
  18. ? $w
  19. - $first
  20. : 6;//要减去的天数

  21.     //本周开始日期

  22.     $st
  23. = date("Y-m-d", strtotime("$gdate -".$dn." days"));

  24.     //本周结束日期

  25.     $en
  26. = date("Y-m-d", strtotime("$st +6 days"));

  27.     //上周开始日期

  28.     $last_st
  29. = date('Y-m-d',strtotime("$st - 7 days"));

  30.     //上周结束日期

  31.     $last_en
  32. = date('Y-m-d',strtotime("$st - 1 days"));

  33.     return
  34. array($st, $en,$last_st,$last_en);//返回开始和结束日期

  35. }



  36. echo
  37. implode("|", aweek("", 1)).'<br />';

  38. //echo date("Y-m-d",strtotime("time()"));

  39. echo
  40. '本周第一天(星期日为一周开始):'.date('Y-m-d', time()-86400*date('w')).'<hr>';

  41. echo
  42. '本周第一天(星期一为一周开始):'.date('Y-m-d', time()-86400*date('w')+(date('w')>0?86400:-6*86400)).'<hr>';

  43. echo
  44. '本月第一天:'.date('Y-m-d', mktime(0,0,0,date('m'),1,date('Y'))).'<hr>';

  45. echo
  46. '本月最后一天:'.date('Y-m-d', mktime(0,0,0,date('m'),date('t'),date('Y'))).'<hr>';

  47. //上个月的开始日期

  48. $m
  49. = date('Y-m-d', mktime(0,0,0,date('m')-1,1,date('Y')));

  50. //上个月共多少天

  51. $t
  52. = date('t',strtotime("$m"));

  53. echo
  54. '上月第一天:'.date('Y-m-d', mktime(0,0,0,date('m')-1,1,date('Y'))).'<hr>';

  55. echo
  56. '上月最后一天:'.date('Y-m-d', mktime(0,0,0,date('m')-1,$t,date('Y'))).'<hr>';
复制代码
  1. //PHP手册上有一个这个方法,用来返回指定日期的周一和周日

  2. function
  3. get_week_range($week, $year){

  4.     $timestamp
  5. = mktime(1,0,0,1,1,$year);

  6.     $firstday
  7. = date("N",$timestamp);

  8.     if($firstday
  9. >4){

  10.         $firstweek
  11. = strtotime('+'.(8-$firstday).' days', $timestamp);

  12.     }else{

  13.         $firstweek
  14. = strtotime('-'.($firstday-1).' days', $timestamp);

  15.     }

  16.     $monday
  17. = strtotime('+'.($week
  18. - 1).' week', $firstweek);

  19.     $sunday
  20. = strtotime('+6 days', $monday);



  21.     $start
  22. = date("Y-m-d", $monday);

  23.     $end
  24. = date("Y-m-d", $sunday);



  25.     return
  26. array($start, $end);

  27. }



  28. //strtotime获取本周第一天和最后一天方法的BUG



  29. //PHP手册上有一个这个方法,用来返回指定日期的周一和周日



  30. function
  31. get_week_range2($week, $year){

  32.     $timestamp
  33. = mktime(1,0,0,1,1,$year);

  34.     $firstday
  35. = date("N",$timestamp);

  36.     if($firstday
  37. >4){

  38.         $firstweek
  39. = strtotime('+'.(8-$firstday).' days', $timestamp);

  40.     }else{

  41.         $firstweek
  42. = strtotime('-'.($firstday-1).' days', $timestamp);

  43.     }

  44.     $monday
  45. = strtotime('+'.($week
  46. - 1).' week', $firstweek);

  47.     $sunday
  48. = strtotime('+6 days', $monday);



  49.     $start
  50. = date("Y-m-d", $monday);

  51.     $end
  52. = date("Y-m-d", $sunday);



  53.     return
  54. array($start, $end);

  55. }
复制代码

但在跨年的时候使用会有问题
例如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处理

  1. if(date('m',$last_week_time) == '01'
  2. and  $tmp_last_week  > 10){

  3.     $last_week_year--;

  4. }
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表