
PHP에는 날짜와 시간을 나타내는 유닉스 타임스탬프를 생성할 수 있는 내장 함수가 있다. 또한, 이러한 유닉스 타임스탬프를 읽기 쉬운 형식으로 변환하는 내장 함수도 있다.
다음의 세 가지 함수는 모두 유닉스 타임스탬프를 만드는 데 사용된다.
만약에 이 함수가 타임스탬프를 생성할 수 없는 경우에는 false를 반환한다.
strtotime() 또는 mktime()에 시간을 지정하지 않으면 자정으로 설정된다.
- time() : 현재 날짜와 시간을 유닉스 타임스탬프로 반환한다.
- strtotime($string) : 문자열을 유닉스 타임스탬프로 변환한다
- mktime(H, i, s, n, j, Y) : 날짜/시간 요소(인수)를 유닉스 타임스탬프로 변환한다.
date()는 유닉스 타임스탬프를 사람이 읽을 수 있는 형식으로 변환한다.
타임스탬프가 주어지지 않으면 현재 날짜와 시간이 표시된다.
- date($format[ , $timestamp]) : 사람이 읽을 수 있는 형식의 유닉스 타임스탬프를 반환한다. 첫 번째 매개변수는 날짜 형식을 지정하는 방법을 지정한다. 두 번째 매개변수는 형식화할 유닉스 타임스탬프다.
PHP의 내장 클래스인 DateTime은 날짜와 시간을 나타내는 객체를 생성한다. 이 객체의 메서드는 객체가 나타내는 날짜와 시간을 사람이 읽을 수 있는 형식이나 유닉스 타임스탬프로 반환할 수 있다.
$date = new DateTime('2001-02-01 15:01:05');
날짜와 시간을 지정하지 않으면, 객체는 현재 날짜와 시간을 사용할 것이다.
날짜를 지정했지만 시간을 지정하지 않았다면, 객체는 지정된 날짜의 자정을 사용할 것이다.
date_create_from_format() 함수를 사용하여 DateTime 객체를 생성할 수도 있다.
$date = date_create_from_format('j-M-Y', '15-Jan-2020');
다음에 있는 DateTime 객체의 메서드는 객체가 나타내는 날짜와 시간을 반환한다.
날짜/시간을 사람이 읽을 수 있는 형식으로 가져오려면 format() 메서드를 사용한다.
날짜/시간을 유닉스 타임스탬프로 가져오려면 getTimestamp() 메서드를 사용한다.
- format($format[ , $DateTimeZone]) : 지정된 형식으로 날짜와 시간을 가져온다. 옵셔널인 두 번째 매개변수는 타임존을 설정한다.
- getTimestamp() : 객체가 나타내는 날짜와 시간에 대한 유닉스 타임스탬프를 반환한다.
DateTime 클래스를 사용하여 객체를 만들었다면, 다음의 메서드를 사용하여 객체가 나타내는 날짜/시간을 설정하거나 업데이트할 수 있다.
날짜/시간을 설정하는 메서드는 객체가 현재 나타내는 날짜/시간을 덮어쓴다.
- setDate($year, $month, $day) : 객체에 대한 날짜를 설정한다.
- setTime($hour, $minute[ , $seconds ][ , $microseconds ]) : 객체에 대한 시간을 설정한다.
- setTimestamp($timestamp) : 유닉스 타임스탬프를 사용하여 날짜/시간을 설정한다.
- modify($DateFormat) : 문자열을 사용하여 날짜/시간을 업데이트한다.
- add($DateInterval) : DateInterval 객체를 사용하여 시간의 간격을 추가한다.
- sub($DateInterval) : DateInterval 객체를 사용하여 시간의 간격을 뺀다.
PHP 인터프리터는 변수를 생성할 때, 변수에 스칼라값이나 배열을 둘 수 있다. PHP 인터프리터가 객체를 생성할 때는 메모리의 독립적인 위치에 객체를 저장한다. 그런 다음 해당 객체가 변수에 저장되면, 객체 자체를 저장하는 것이 아니라 해당 객체가 생성된 위치를 PHP 인터프리터의 메모리에 저장한다.
즉, 객체를 만들어서 변수에 저장한 다음에 두 번째 변수를 선언하고 해당 변숫값으로 동일한 객체를 할당하면 두 변수 모두 동일한 객체의 위치를 갖게 된다.
따라서, 하나의 변수의 객체를 업데이트하면 다른 변수도 업데이트될 것이다.
$start = new DateTime('2020/12/1'); $end = $start; // 두 변수 모두 동일한 객체를 가리킨다. $end->modify('+1 day');
이러한 문제를 해결하려면, clone이라는 키워드를 사용하여 객체의 복사본을 만들 수 있다.
$start = mew DateTime('2020/12/1'); $end = clone $start; // $end의 객체만 수정 $end->modify('+1 day');
예시)
<?php $start = new DateTime(); $start->setDate(2021, 12, 01); $start->setTime(17, 30); $end = clone $start; $end->modify('+2 hours 15 min'); ?> <?php include 'includes/header.php'; ?> <p><b>Event starts:</b> <?= $start->format('g:i a - D, M j Y') ?></p> <p><b>Event ends:</b> <?= $end->format('g:i a - D, M j Y')?></p> <?php include 'includes/footer.php'; ?>
결과)

출처 - 존 두켓, <백엔드 프로그래밍을 위한 PHP & MySQL>, Jpub, 2022