Heim  >  Artikel  >  Backend-Entwicklung  >  根据给定的日期格式'YYYY-mm-dd',获取该日期所在周的起始日期

根据给定的日期格式'YYYY-mm-dd',获取该日期所在周的起始日期

WBOY
WBOYOriginal
2016-07-25 08:50:201036Durchsuche
常用日期操作
  1. /**
  2. * 获取一年中所有星期的起始日期
  3. * @param $year 格式 'YYYY'
  4. * 返回二维数组 下标 key1值对应一年中某一天所在周的实际年份 key2值对应一年中某一天所在的周数[一年中第几周]
  5. * 返回false 日期格式错误
  6. */
  7. function get_all_weeks($year){
  8. $week_arr = array();
  9. $year = intval(trim($year));
  10. $preg = "/^\d{4,}$/";
  11. if(!preg_match($preg, $year)){
  12. return false;
  13. }
  14. $begin_day = $year . '-01-01';
  15. $end_day = $year . '-12-31';
  16. //一年第一个星期一
  17. if(date('w',strtotime($begin_day))!=1){
  18. $begin_day = date('Y-m-d',strtotime("next monday", strtotime($begin_day)));
  19. }
  20. //第一个星期一所在周数
  21. $begin_week_num = intval(date('W',strtotime($begin_day)));
  22. //一年最后一个星期天
  23. if(date('w',strtotime($end_day))!=0){
  24. $end_day = date('Y-m-d',strtotime("last sunday",strtotime($end_day)));
  25. //存在跨年的星期,跨年所在周星期一
  26. $end_day_next = date('Y-m-d',strtotime($end_day)+24*60*60);
  27. //跨年星期所属年份与所在周数
  28. $stride_year = date('o',strtotime($end_day_next));
  29. $stride_weeknum = intval(date('W',strtotime($end_day_next)));
  30. }
  31. //最后一个星期天所在周数
  32. $end_week_num = intval(date('W',strtotime($end_day)));
  33. //一年第一个周一为一年的第一周或者第二周
  34. if($begin_week_num!=1){
  35. $i=2;
  36. }else{
  37. $i=1;
  38. }
  39. $j = 0;
  40. for($i;$i $start_date = date("Y-m-d", strtotime("$begin_day $j week"));
  41. $end_day = date("Y-m-d", strtotime($start_date . '+6 day'));
  42. $week_arr[$year][$i] = array(
  43. $start_date,
  44. $end_day
  45. );
  46. $j++;
  47. }
  48. if($end_day_next){
  49. $week_arr[$stride_year][$stride_weeknum] = array(
  50. $end_day_next,
  51. date("Y-m-d", strtotime($end_day_next . '+6 day'))
  52. );
  53. }
  54. return $week_arr;
  55. }
  56. //demo_调用
  57. /*
  58. $year = '2013';
  59. if(get_all_weeks($year)){
  60. var_dump(get_all_weeks($year));
  61. }else{
  62. echo '日期格式出错';
  63. }
  64. */
  65. /**
  66. * 获取某一天所在周的起始日期
  67. * 依赖 function get_all_weeks
  68. * @param $day 格式:'YYYY-mm-dd'
  69. * 返回false 日期格式错误
  70. * 正确,返回json "{"begin_day":"YYYY-mm-dd","end_day":"YYYY-mm-dd"}"
  71. */
  72. function get_day_week($day){
  73. $date_arr = explode('-', trim($day));
  74. if(!checkdate(intval($date_arr[1]), intval($date_arr[2]), intval($date_arr[0]))){
  75. return false;
  76. }
  77. $year = date('Y',strtotime($day));
  78. $weeks = get_all_weeks($year);
  79. //某一天所属的年份与周数
  80. $real_year = date('o',strtotime($day));
  81. $week_num = intval(date('W',strtotime($day)));
  82. if(!empty($weeks[$real_year][$week_num][0]))
  83. $begin_day = $weeks[$real_year][$week_num][0];
  84. if(!empty($weeks[$real_year][$week_num][1]))
  85. $end_day = $weeks[$real_year][$week_num][1];
  86. //跨年周数值存储于上一年中
  87. if(empty($begin_day)||empty($end_day)){
  88. $year = date('Y',strtotime($day))-1;
  89. $weeks = get_all_weeks($year);
  90. $real_year = date('o',strtotime($day));
  91. $week_num = intval(date('W',strtotime($day)));
  92. if(!empty($weeks[$real_year][$week_num][0]))
  93. $begin_day = $weeks[$real_year][$week_num][0];
  94. if(!empty($weeks[$real_year][$week_num][1]))
  95. $end_day = $weeks[$real_year][$week_num][1];
  96. }
  97. $the_day = array(
  98. 'begin_day' => $begin_day,
  99. 'end_day' => $end_day
  100. );
  101. $the_day = json_encode($the_day);
  102. return $the_day;
  103. }
  104. //demo_调用
  105. /*
  106. $day = '2014-01-01';
  107. if(get_day_week($day)){
  108. var_dump(get_day_week($day));
  109. }else{
  110. echo '日期格式出错';
  111. }
  112. */
复制代码


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn