3.10. 날짜 시간 계산하기

php에서 날짜와 시간을 처리하는 방법을 알아본다.

<?php
$date1 = date("Y-m-d H:i:s");
$date2 = new DateTime();
$date2_str = $date2->format("Y-m-d H:i:s");

var_dump($date1); echo "<br />";
var_dump($date2); echo "<br />";
var_dump($date2_str); echo "<br />";

$tomorrow = $date2->add(new DateInterval("P1D"));
var_dump($tomorrow); echo "<br />";

위 코드를 datetime.php 파일에 저장하고 브라우저에서 결과를 확인한다.

string(19) "2020-07-23 07:28:18" 
object(DateTime)#1 (3) { ["date"]=> string(26) "2020-07-23 07:28:18.498365" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Berlin" } 
string(19) "2020-07-23 07:28:18" 
object(DateTime)#1 (3) { ["date"]=> string(26) "2020-07-24 07:28:18.498365" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Berlin" } 


고전적인 php 는 날짜를 문자열로 처리한다. $date1 이 예시이다.

$date1 = date("Y-m-d H:i:s");

"Y-m-d H:i:s"는 날짜 포메터라고 부른다.

  • Y 는 년도(Year) 4 자리.
  • y 는 년도 2 자리.
  • m 은 월(month).
  • d 는 일(day).
  • H  24시간 표기 시간(hour).
  • h  12시간 표기 시간.
  • i 는 분.
  • s 는 초(second)를 나타낸다.

따라서 2021년 2월 24일 10시 30분 25초를 Y-m-d H:i:s 형식으로 나타내면 2021-02-24 10:30:25가 된다. ymd로 표기하면 210224다.


PHP 5.2.0 버전 이상부터는 날짜 타입 DateTime 이 있다. 단순 문자열이 아니라 날짜를 더하거나 빼거나 비교하는 것이 가능하다.

$date2 = new DateTime();

DateTime 타입을 포멧 문자열로 바꾸고 싶으면 ->format(날짜포메터) 메소드를 사용한다.

$date2->format("Y-m-d H:i:s")

날짜를 더하고 싶으면 add 메소드를 사용한다. add 함수의 메소드는 DateInterval 객체 타입을 파라미터로 받는다. DateInterval 객체의 파라미터 "P1D"  Period one(1) Day 의 약자로 하루 간격 이란 뜻이다.

$date2 = new DateTime();
$date2->add(new DateInterval("P1D"));

DateTime 타입 객체를 사용하지 않고 문자열을 이용해 하루를 추가하려면 아래와 같이 한다.

date("Y-m-d", strtotime($date1.'+ 1 days'))

날짜 표현을 시간으로 바꾸고, 시간을 다시 날짜로 변경하는 것이다.
위 표현을 풀어보면 아래와 같다.

Copy$date = "2021-02-24";
$tomorrow_expression = $date . " + 1 days"; // 2021-02-24 + 1 days
$tomorrow_time = strtotime($tomorrow_expression); // 1614207600
$tomorrow_date = date("Y-m-d", $tomorrow_time); // 2021-02-25