ホームページ >バックエンド開発 >PHPチュートリアル >指定された日付形式「YYYY-mm-dd」に従って、その日付が位置する週の開始日を取得します。

指定された日付形式「YYYY-mm-dd」に従って、その日付が位置する週の開始日を取得します。

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-07-25 08:50:201165ブラウズ
一般的な日付操作
  1. /**
  2. * 一年のすべての週の開始日を取得します
  3. * @param $year format 'YYYY'
  4. * 年の特定の日が含まれる実際の年に対応する 2 次元配列の添え字 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. //One年 先週の日曜日
  23. if(date('w',strtotime($end_day))!=0){
  24. $end_day = date('Y-m-d',strtotime("最後の日曜日",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. //年の最初の月曜日は、年の第 1 週または第 2 週です
  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 year"));
  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_call
  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. * get_all_weeks 関数に依存します
  68. * @param $day format: '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 =爆発(' -', トリム($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($日)));
  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_call
  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. */
コードをコピー


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。