코딩도 개발... 축구도 개발... 하...

2017년 7월 18일 화요일

php strtotime, mktime 날짜 계산 방법과 postgresql를 사용한 방법

1. strtotime 을 이용한 날짜 계산
  • 한 달 후 날짜 계산
echo date("Y-m-d",strtotime("+1 month",strtotime("2010-02-28")));
echo "<br />";
echo date("Y-m-d",strtotime("+1 month",strtotime("2010-03-31")));
echo "<br />";
echo date("Y-m-d",strtotime("+1 month",strtotime("2010-04-01")));
echo "<br />";
결과
  • 2010-03-28
  • 2월 28일 한달 후 는 3월 28일이 맞음
결과
  • 2010-05-01
  • 3월 31일 한 달 후는 4월 31일인데 없기 때문에 자동으로 5월 1일로 넘겨버림
    • 4월 30일 결과를 원했다면 낭패를 볼 수 있다.
결과
  • 2010-05-01
  • 4월 1일 한달 후 는 5월 1일 맞음
2. mktime 을 이용한 날짜 계산
  • 한 달 후 날짜 계산
$tmpDay explode("-","2010-02-28");
echo date("Y-m-d"mktime(0,0,0,$tmpDay[1]+1,$tmpDay[2],$tmpDay[0]));
echo '<br />';
$tmpDay explode("-","2010-03-31");
echo date("Y-m-d"mktime(0,0,0,$tmpDay[1]+1,$tmpDay[2],$tmpDay[0]));
echo '<br />';
$tmpDay explode("-","2010-04-01");
echo date("Y-m-d"mktime(0,0,0,$tmpDay[1]+1,$tmpDay[2],$tmpDay[0]));
echo '<br />';

  • 결과
    • 2010-03-28
    • 2월 28일 한달 후 는 3월 28일이 맞음
  • 결과
    • 2010-05-01
    • 3월 31일 한 달 후는 4월 31일인데 없기 때문에 자동으로 5월 1일로 넘겨버림
      • 4월 30일 결과를 원했다면 낭패를 볼 수 있다.
  • 결과
    • 2010-05-01
    • 4월 1일 한달 후 는 5월 1일 맞음
3. DB 를 사용한 날짜 계산
  • pgsql 전용
mall=# select date '2001-03-31' + interval '1 month';  
      ?column?      
---------------------
 2001-04-30 00:00:00
(1 row)
mall=# select date '2001-04-01' + interval '1 month'
      ?column?      
---------------------
 2001-05-01 00:00:00
(1 row)
  • 결과
    • 2010-04-30
    • 03월 31일 한달 후를 4월 30일로 계산함
      • php mktime, strtotime 방식은 4월 31일이 없기 때문에 한 달 후를 5월 1일로 계산하나 postgresql은 4월 30일로 계산하고 있다.
  • 결과
    • 2010-05-01
    • 4월 1일 한달 후 는 5월 1일 이 맞음

댓글 없음:

댓글 쓰기