DB/MySQL

[MariaDB/MySQL] 1월 30일의 1개월 후는 어떻게 계산할까?

채윤아빠 2020. 2. 7. 23:21
728x90
반응형

만료기간 관련된 작업을 하던 중에 올해 윤달도 있고 해서, 1월 30일의 1달 후는 몇일일지 궁금해졌습니다.

그래서 다음과 같은 쿼리를 작성하여 실행해 보았습니다.
\

MariaDB [(none)]> SELECT DATE_ADD('2020-01-30', INTERVAL 30 DAY), DATE_ADD('2020-01-31', INTERVAL 30 DAY), DATE_ADD('2020-01-30', INTERVAL 1 MONTH), DATE_ADD('2020-01-31', INTERVAL 1 MONTH);
+-----------------------------------------+-----------------------------------------+------------------------------------------+------------------------------------------+
| DATE_ADD('2020-01-30', INTERVAL 30 DAY) | DATE_ADD('2020-01-31', INTERVAL 30 DAY) | DATE_ADD('2020-01-30', INTERVAL 1 MONTH) | DATE_ADD('2020-01-31', INTERVAL 1 MONTH) |
+-----------------------------------------+-----------------------------------------+------------------------------------------+------------------------------------------+
| 2020-02-29                              | 2020-03-01                              | 2020-02-29                               | 2020-02-29                               |
+-----------------------------------------+-----------------------------------------+------------------------------------------+------------------------------------------+
1 row in set (0.000 sec)


1달을 30일로 하여 1월 30일에 30일을 더하면, 올해는 윤달이기 때문에 2월 29일이 됩니다.

1월 30일이나 1월 31일에 30일이 아닌 1달을 더하면, 올해는 윤달이기 때문에 2월 29일이 됩니다.

즉, DATE_ADD 함수에서 현재일이 더한 개월수의 날짜의 마지막 날을 초과하는 경우 무조건 해당 월의 마지막 날짜로 고정이 됩니다.

당연한 것이겠지만, 오늘 날짜를 기준으로 월기준 기간을 계산할 때는 일이 아닌 달수를 더하면 됩니다.

여기에 중간에 서비스를 해지하여 일할 계산이 들어가게 된다면, 해지한 월의 총 일수로 요금을 나누어 현재까지 사용한 일수를 DATEDIFF() 함수로 계산을 해서 제하고 환불 등의 철차를 처리해야 합니다.


\