12월 - 12/21(수)에 발송 /// 1월 - 1/25(수)에 발송
매달 구체적으로 어떤날에 메시지를 보내야 하는 날짜를 구해놓아야 된다고 했을때
어떻게 구할지의 풀이과정과 완성본이다.
마지막날 기준 그 전주 목요일에 알림톡을 보내면 된다고 판단해서
우선 다음달에 마지막날을 구한 후, 그날을 기준 전주 목요일을 찾아서
해당하는날을 톡을 보내는 날로 지정해 주었다.
만약 마지막날이 수요일이라면 그날기준 1주일 전이 알림톡 발신날짜이고, 그게 아니라면 수요일에 해당하는 날짜를 찾아서 구해주는 코드를 만들었따.
https://zxchsr.tistory.com/312
https://88240.tistory.com/113
첫번째 티스토리에서는
$yoil = array("일","월","화","수","목","금","토");
$target_yoil = $yoil[date('w', strtotime(date('Y-m-d')))]; // 현재 2022-05-31 (화요일)
echo $target_yoil; // 화
'w' 를 사용해서 요일이 숫자로 나온다는것을 참고하였고,
두번째 티스토리에서는
//오늘 날짜 출력 ex) 2013-04-10
$today_date = date('Y-m-d');
//오늘의 요일 출력 ex) 수요일 = 3
$day_of_the_week = date('w');
//오늘의 첫째주인 날짜 출력 ex) 2013-04-07 (일요일임)
$a_week_ago = date('Y-m-d', strtotime($date." -".$day_of_the_week."days"));
오늘의 첫째주인 날짜 등 내가 원하는 형태의 날짜를 구할 수 있다는 부분에서
힌트를 많이 얻었다.
$month_after_last_day = date('Y-m-t',strtotime('+1 month'));
// 한달뒤의 마지막날
$one_month_after_before_1w = date('Y-m-d',strtotime('-1 week',strtotime($month_after_last_day)));
// 한달뒤의 마지막날의 한주 전 즉, 마지막 주의 바로 1주일전의 날짜
$the_day_of_the_week = date('w',strtotime($one_month_after_before_1w));
// 1주일전 날짜가 해당하는 요일
switch(true){
case $the_day_of_the_week>3:
$the_thr_day_number= -($the_day_of_the_week-3);
break;
/// 마지막날 일주일 전인 날짜가
/// 수요일 이후 즉 목(4),금(5),토(6) 라면 그날에서 3을 초과한 만큼
/// 빼줘야 하기 때문에 $the_thr_day_number 에 그 수를 할당해준다.
case $the_day_of_the_week==3:
$the_thr_day_number=0;
break;
/// 마지막날짜가 수요일인 경우이다.
case $the_day_of_the_week<3:
$the_thr_day_number= 3-$the_day_of_the_week;;
break;
/// 수요일 이전 즉 일(0),월(1),화(2) 일 경우이다.
/// 수요일에서 이 날짜들을 뺀만큼 더해줘야 수요일이 나오기 때문에
/// 나중에 더해주기 위해 $the_thr_day_number에 할당한다.
};
// if else 문
// if($the_day_of_the_week>3){
// $the_thr_day_number= -($the_day_of_the_week-3);
// }else if($the_day_of_the_week==3){
// $the_thr_day_number=0;
// }else if($the_day_of_the_week<3){
// $the_thr_day_number= 3-$the_day_of_the_week;
// }
// 요일이 수요일(3) 보다 이후라면 그만큼 빼주기 위해, 수요일(3) 이전이라면 그만큼 더해주기 위해서 변수에 그 숫자를 할당
// 0일때는 그냥 그 값을 그대로 넣어주면 됨
$alarm_Talk_send_date = date('Y-m-d', strtotime($one_month_after_before_1w.$the_thr_day_number."days"));
// 중간중간 좀 헷깔려서 echo 로 찍어가며 확인하면서 진행을 하였다.
// 여기에 적기에는 너무 길지만 코드작성 순서 때문에 값이 중간에서 틀어진경우가 있어서
// 지금처럼 찍어보면서 하면 오류가 날 확률이 적은것 같다. (제일 좋은건 그냥 기억하면 되는거..)
echo "한달 후 마지막날은 : ".$month_after_last_day;
echo "<br>";
echo "한달 후 마지막날의 1주일 전 : ".$one_month_after_before_1w;
echo "<br>";
echo "요일은 : ".$the_day_of_the_week;
echo "<br>";
echo "알림톡이 발송 되어야 할 예정 날짜는 : ".$alarm_Talk_send_date;
echo "<br>";
return;
결과창도 내가 원하는데로 잘 나오는것도 확인할 수 있었다.