PHP 에서 어느 달의 마지막 날을 구하려면

[목차(도우미)]
어떤 이유에서든 주어진 달의 마지막날을 구하고 싶은 때가 있다. 사람이라면 간단히 오른손을 주먹 쥐어 보고 뼈의 올록 볼록한 것을 찾아서 세어 보면 답이 나오겠지만 프로그램으로 구할 때는 간단히 답이 떠오르지 않는다.

알고리즘의 구현

자주 쓰는 기존 함수가 존재하는지는 조사해 본적이 없으나 간단히 계산하려면 3단계를 거치면 주어진 달의 마지막 날을 구할 수 있다.
  1. 주어진 달의 첫날을 구한다.
  2. 주어진 달의 다음 달의 첫날을 구한다.
  3. 다음 달의 첫날에서 하루를 뺀다.
예를 들어 2012년2월의 마지막날은?
  1. <?php
  2. $date = new DateTime('2012-02' . '-01');
  3. $date->add(new DateInterval('P1M'));
  4. $date->sub(new DateInterval('P1D'));
  5. ?>

날짜 계산이란것이 화려하지는 않지만 흔히 쓰이는 것이다

독특한 점은 덧셈과 뺄셈 연산만 수행했으나 교환법칙이 성립하지 않는다는 것이다. 2012-02-01 에서 하루를 먼저 빼고 1달을 더하면 1월31일+1달=2월31일=3월3일이 되어버릴 것이다.

PHP의 함수 연산에 관하여는 http://www.php.net/ 페이지를 참조한다.

mktime 함수를 쓰는 구현

위와 같이 열심히 연산을 구사하여 계산하고 보니 비슷한 기능을 수행하는 함수가 존재한다는 것을 알게 되었다. PHP 의 내부 구조를 보기 전에는 단정할 수 없으나 내부적으로 알고리즘을 구현하는 함수 매크로 처럼 작동시킬 수 있다.

예를 들어 2012년2월의 마지막날은? 3월의 0일을 구하는 것과 같다.
  1. <?php
  2. //mktime(H, i, s, month, day, year)
  3. $date = mktime(0, 0 , 0, 2+1, 0, 2012);
  4. ?>
mktime의 사양:
http://php.net/manual/en/function.mktime.php


by 금메달.아빠 on 2012. 1. 26. 22:06