質問するログイン新規登録

回答編集履歴

3

調整

2019/05/27 01:19

投稿

yambejp
yambejp

スコア118102

answer CHANGED
@@ -52,4 +52,38 @@
52
52
  return $x>=$start and $x<=$end;
53
53
  });
54
54
  print_r($list);
55
- ```
55
+ ```
56
+
57
+ # 第n週のx曜日
58
+ ```PHP
59
+ $start="2019-01-01";
60
+ $end ="2019-12-31";
61
+ $d_start =strtotime($start." first day of 0 month");
62
+ $d_end =strtotime($end." first day of 1 month");
63
+ $day_of_week=["sunday","monday","tueday","wednesday","thuesday","friday","saturday"];
64
+ $target=[["sunday",6]];
65
+ $list=[];
66
+ $d=$d_start;
67
+ $c=0;
68
+ while($d<$d_end){
69
+ $w=(date("w",$d));
70
+ foreach($target as $val){
71
+ $offset=array_search($val[0],$day_of_week)<$w?1:0;
72
+ $day=date("Y-m-d",strtotime(date("Y-m-d",$d).sprintf(" first %s of 0 month +%d week",$val[0],$val[1]-1-$offset)));
73
+ if(date("Y-m",$d)==substr($day,0,7)) $list[]=$day;
74
+ }
75
+ $d=strtotime(date("Y-m-d",$d)." + 1 month");
76
+ }
77
+ sort($list);
78
+ $list=array_filter($list,function($x) use($start,$end){
79
+ return $x>=$start and $x<=$end;
80
+ });
81
+ print_r($list);
82
+ ```
83
+ 上記で
84
+ ```PHP
85
+ $start="2018-01-01";
86
+ $end ="2050-07-25";
87
+ $target=[["monday",1],["tuesday",2],["thursday",3]];
88
+ ```
89
+ とすれば最初の命題にも合致すると思います

2

tuiki

2019/05/27 01:19

投稿

yambejp
yambejp

スコア118102

answer CHANGED
@@ -23,4 +23,33 @@
23
23
  });
24
24
  print_r($list);
25
25
 
26
+ ```
27
+
28
+ # 追記
29
+ 任意の曜日とn番目を指定
30
+ ```PHP
31
+ $start="2018-01-01";
32
+ $end ="2050-07-25";
33
+
34
+ $d_start =strtotime($start." first day of 0 month");
35
+ $d_end =strtotime($end." first day of 1 month");
36
+
37
+ $target=[["monday",1],["tuesday",2],["thursday",3]];
38
+ //上記、第1月曜、第2火曜、第3木曜
39
+
40
+ $list=[];
41
+ $d=$d_start;
42
+ $c=0;
43
+ while($d<$d_end){
44
+ foreach($target as $val){
45
+ $list[]=date("Y-m-d",strtotime(date("Y-m-d",$d).sprintf(" first %s of 0 month +%d week",$val[0],$val[1]-1)));
46
+ }
47
+
48
+ $d=strtotime(date("Y-m-d",$d)." + 1 month");
49
+ }
50
+ sort($list);
51
+ $list=array_filter($list,function($x) use($start,$end){
52
+ return $x>=$start and $x<=$end;
53
+ });
54
+ print_r($list);
26
55
  ```

1

chousei

2019/05/24 04:20

投稿

yambejp
yambejp

スコア118102

answer CHANGED
@@ -8,10 +8,8 @@
8
8
  $d_start =strtotime($start." first day of 0 month");
9
9
  $d_end =strtotime($end." first day of 1 month");
10
10
 
11
-
12
11
  $list=[];
13
12
  $d=$d_start;
14
- $c=0;
15
13
  while($d<$d_end){
16
14
  $list[]=date("Y-m-d",strtotime(date("Y-m-d",$d)." first tuesday of 0 month +1 week"));
17
15
  $list[]=date("Y-m-d",strtotime(date("Y-m-d",$d)." first tuesday of 0 month +3 week"));