php 알림톡을 보내기 위한 날짜 함수 세팅

Seong Hyeon Kim·2022년 12월 19일
0

목표

  • 매달 이번달의 마지막째주 전 주 수요일에 톡을 보내야 한다고 햇을때

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;

결과창도 내가 원하는데로 잘 나오는것도 확인할 수 있었다.

profile
삽질도 100번 하면 요령이 생긴다. 부족한 건 경험으로 채우는 백엔드 개발자

0개의 댓글