一般的な日付操作
- /**
- * 一年のすべての週の開始日を取得します
- * @param $year format 'YYYY'
- * 年の特定の日が含まれる実際の年に対応する 2 次元配列の添え字 key1 の値を返します特定の日に対応する key2 の値 曜日 [年間の週]
- * false を返します 日付の形式が間違っています
- */
- function get_all_weeks($year){
- $week_arr = array();
- $year = intval(trim($year));
- $preg = "/^d{ 4,}$/";
- if(!preg_match($preg, $year)){
- return false;
- }
- $begin_day = $year . '-01-01';
- $end_day = $year . '- 12-31';
- //年の最初の月曜日
- if(date('w',strtotime($begin_day))!=1){
- $begin_day = date('Y-m-d',strtotime(" next monday", strtotime($begin_day)));
- }
- //最初の月曜日が位置する週数
- $begin_week_num = intval(date('W',strtotime($begin_day)));
- //One年 先週の日曜日
- if(date('w',strtotime($end_day))!=0){
- $end_day = date('Y-m-d',strtotime("最後の日曜日",strtotime($end_day)));
- //大晦日の週があり、大晦日の週は月曜日です
- $end_day_next = date('Y-m-d',strtotime($end_day)+24*60*60);
- //年と大晦日の週の位置 週番号
- $stride_year = date('o',strtotime($end_day_next));
- $stride_weeknum = intval(date('W',strtotime($end_day_next)));
- }
- / /最後の日曜日の週番号
- $end_week_num = intval(date('W',strtotime($end_day)));
- //年の最初の月曜日は、年の第 1 週または第 2 週です
- if($ begin_week_num!=1){
- $i=2;
- }else{
- $i=1;
- }
- $j = 0;
- for($i;$i<=$end_week_num;$i++){
- $start_date = date("Y-m-d" , strtotime("$begin_day $j year"));
- $end_day = date("Y-m-d", strtotime($start_date . '+6 day'));
- $week_arr[$year][ $i] = array(
- $start_date,
- $end_day
- );
- $j++;
- }
- if($end_day_next){
- $week_arr[$stride_year][$stride_weeknum] = array(
- $end_day_next,
- date( "Y-m-d", strtotime( $end_day_next . '+6 day'))
- );
- }
- return $week_arr;
- }
- //demo_call
- /*
- $year = '2013';
- if(get_all_weeks($year )){
- var_dump(get_all_weeks($year));
- }else{
- echo '日付形式エラー';
- }
- */
- /**
- * 特定の日が位置する週の開始日を取得します
- * get_all_weeks 関数に依存します
- * @param $day format: 'YYYY-mm-dd'
- * 日付形式が間違っているため false を返します
- * 正しい、json "{"begin_day": "YYYY-mm-dd","end_day":"YYYY-mm-dd"}"
- を返します*/
- function get_day_week($day){
- $date_arr =爆発(' -', トリム($day));
- if(!checkdate(intval($date_arr[1]), intval($date_arr[2]), intval($date_arr[0]))){
- return false;
- }
- $year = date('Y',strtotime($day));
- $weeks = get_all_weeks($year);
- //特定の日の年と週番号
- $real_year = date( 'o',strtotime ($day));
- $week_num = intval(date('W',strtotime($day)));
- if(!empty($weeks[$real_year][$week_num][0] ))
- $begin_day = $weeks[$real_year][$week_num][0];
- if(!empty($weeks[$real_year][$week_num][1]))
- $end_day = $weeks[$real_year] ][$week_num] [1];
- //新年の週の値は前年に保存されます
- if(empty($begin_day)||empty($end_day)){
- $year = date('Y',strtotime ($day)) -1;
- $weeks = get_all_weeks($year);
- $real_year = date('o',strtotime($day));
- $week_num = intval(date('W',strtotime($日)));
- if(!empty($weeks[$real_year][$week_num][0]))
- $begin_day = $weeks[$real_year][$week_num][0];
- if(!empty( $weeks[$real_year ][$week_num][1]))
- $end_day = $weeks[$real_year][$week_num][1]
- }
- $the_day = array(
- 'begin_day' => $begin_day ,
- 'end_day' => $end_day
- );
- $the_day = json_encode($the_day);
- return $the_day;
- }
- //demo_call
- /*
- $day = '2014-01-01';
- if(get_day_week ($day)){
- var_dump(get_day_week($day));
- }else{
- echo '日付形式エラー';
- }
- */
コードをコピー
|