PHP
날짜 및 시간 작업
수색…
통사론
- 문자열 날짜 (문자열 $ 형식 [, int $ 타임 스탬프 = 시간 ()])
- int strtotime (string $ time [, int $ now])
영어 날짜 설명을 날짜 형식으로 구문 분석
date()
와 결합 된 strtotime()
함수를 사용하여 다른 영어 텍스트 설명을 날짜로 구문 분석 할 수 있습니다.
// Gets the current date
echo date("m/d/Y", strtotime("now")), "\n"; // prints the current date
echo date("m/d/Y", strtotime("10 September 2000")), "\n"; // prints September 10, 2000 in the m/d/Y format
echo date("m/d/Y", strtotime("-1 day")), "\n"; // prints yesterday's date
echo date("m/d/Y", strtotime("+1 week")), "\n"; // prints the result of the current date + a week
echo date("m/d/Y", strtotime("+1 week 2 days 4 hours 2 seconds")), "\n"; // same as the last example but with extra days, hours, and seconds added to it
echo date("m/d/Y", strtotime("next Thursday")), "\n"; // prints next Thursday's date
echo date("m/d/Y", strtotime("last Monday")), "\n"; // prints last Monday's date
echo date("m/d/Y", strtotime("First day of next month")), "\n"; // prints date of first day of next month
echo date("m/d/Y", strtotime("Last day of next month")), "\n"; // prints date of last day of next month
echo date("m/d/Y", strtotime("First day of last month")), "\n"; // prints date of first day of last month
echo date("m/d/Y", strtotime("Last day of last month")), "\n"; // prints date of last day of last month
날짜를 다른 형식으로 변환
기본 사항
하나의 날짜 형식을 다른 형식으로 변환하는 단순한 방법은 date()
와 함께 strtotime()
을 사용하는 것입니다. strtotime()
은 날짜를 Unix Timestamp 로 변환합니다. 그런 다음 Unix Timestamp를 date()
에 전달하여 새로운 형식으로 변환 할 수 있습니다.
$timestamp = strtotime('2008-07-01T22:35:17.02');
$new_date_format = date('Y-m-d H:i:s', $timestamp);
또는 한 - 라이너로 :
$new_date_format = date('Y-m-d H:i:s', strtotime('2008-07-01T22:35:17.02'));
strtotime()
은 날짜가 유효한 형식 strtotime()
을 명심하십시오. 유효한 형식을 제공하지 않으면 strtotime()
false를 반환하여 날짜가 1969-12-31이됩니다.
DateTime()
PHP 5.2에서 PHP는 DateTime()
클래스를 제공하여 날짜 (및 시간) 작업을위한보다 강력한 도구를 제공합니다. DateTime()
을 사용하여 위의 코드를 다시 작성할 수 있습니다.
$date = new DateTime('2008-07-01T22:35:17.02');
$new_date_format = $date->format('Y-m-d H:i:s');
유닉스 타임 스탬프 작업
date()
는 Unix 타임 스탬프를 두 번째 매개 변수로 사용하고 형식이 지정된 날짜를 반환합니다.
$new_date_format = date('Y-m-d H:i:s', '1234567890');
DateTime ()은 타임 스탬프 이전에 @
를 추가하여 유닉스 타임 스탬프와 함께 작동합니다.
$date = new DateTime('@1234567890');
$new_date_format = $date->format('Y-m-d H:i:s');
보유한 타임 스탬프가 밀리 초 ( 000
끝나거나 타임 스탬프가 13 자 길이) 인 경우 다른 형식으로 변환하려면 초로 변환해야합니다. 이 작업에는 두 가지 방법이 있습니다.
마지막 세 자리를 자르는 방법은 여러 가지가 있지만, substr()
것이 가장 쉽습니다.
$timestamp = substr('1234567899000', -3);
- substr을 1000으로 나눕니다.
타임 스탬프를 1000으로 나누어 초로 변환 할 수도 있습니다. 타임 스탬프가 너무 커서 32 비트 시스템에서 수학을 수행 할 수 없으므로 수학을 문자열로 사용하려면 BCMath 라이브러리를 사용해야합니다.
$timestamp = bcdiv('1234567899000', '1000');
Unix Timestamp를 얻으려면 strtotime()
을 사용하여 Unix Timestamp를 반환하면됩니다 :
$timestamp = strtotime('1973-04-18');
DateTime ()을 사용하면 DateTime::getTimestamp()
사용할 수 있습니다.
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->getTimestamp();
PHP 5.2를 실행중인 경우 대신 U
형식 지정 옵션을 사용할 수 있습니다.
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->format('U');
비표준 및 애매한 날짜 형식 작업
불행히도 개발자가 작업해야하는 모든 날짜가 표준 형식이 아닙니다. 다행히도 PHP 5.3은이를위한 솔루션을 제공했습니다. DateTime::createFromFormat()
사용하면 날짜 문자열이있는 형식을 PHP에 알릴 수 있으므로 추가 조작을 위해 DateTime 객체로 성공적으로 파싱 할 수 있습니다.
$date = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM');
$new_date_format = $date->format('Y-m-d H:i:s');
PHP 5.4에서 DateTime()
코드를 한 DateTime()
바꿀 수있는 인스턴스 생성시 클래스 멤버 액세스 기능이 추가되었습니다.
$new_date_format = (new DateTime('2008-07-01T22:35:17.02'))->format('Y-m-d H:i:s');
불행히도 DateTime::createFromFormat()
아직 작동하지 않습니다.
날짜 형식에 대해 미리 정의 된 상수 사용
PHP 5.1.0 이후의 일반적인 날짜 형식 문자열 대신 date()
에서 날짜 형식에 대해 미리 정의 된 상수를 사용할 수 있습니다.
미리 정의 된 날짜 형식 상수
DATE_ATOM
- Atom (2016-07-22T14 : 50 : 01 + 00 : 00)
DATE_COOKIE
- HTTP 쿠키 (금요일, 22-7 월 -16 14:50:01 UTC)
DATE_RSS
- RSS (금, 20 7 월 22 일 14:50:01 +0000)
DATE_W3C
- 월드 와이드 웹 컨소시엄 (2016-07-22T14 : 50 : 01 + 00 : 00)
DATE_ISO8601
- ISO-8601 (2016-07-22T14 : 50 : 01 + 0000)
DATE_RFC822
- RFC 822 (금, 7 월 22 일 14:50:01 +0000)
DATE_RFC850
- RFC 850 (금요일, 22-7 월 -16 14:50:01 UTC)
DATE_RFC1036
- RFC 1036 (금, 7 월 22 일 14:50:01 +0000)
DATE_RFC1123
- RFC 1123 (금, 20 7 월 22 일 14:50:01 +0000)
DATE_RFC2822
- RFC 2822 (Fri, 20 Jul Jul 2016 14:50:01 +0000)
DATE_RFC3339
- DATE_ATOM (2016-07-22T14 : 50 : 01 + 00 : 00)과 동일
사용 예제
echo date(DATE_RFC822);
그러면 다음과 같이 출력됩니다 : Fri, 22 Jul 16 14:50:01 +0000
echo date(DATE_ATOM,mktime(0,0,0,8,15,1947));
다음과 같이 출력됩니다 : 1947-08-15T00 : 00 : 00 + 05 : 30
두 날짜 / 시간의 차이 얻기
가장 실현 가능한 방법은 DateTime
클래스를 사용하는 것입니다.
예 :
<?php
// Create a date time object, which has the value of ~ two years ago
$twoYearsAgo = new DateTime("2014-01-18 20:05:56");
// Create a date time object, which has the value of ~ now
$now = new DateTime("2016-07-21 02:55:07");
// Calculate the diff
$diff = $now->diff($twoYearsAgo);
// $diff->y contains the difference in years between the two dates
$yearsDiff = $diff->y;
// $diff->m contains the difference in minutes between the two dates
$monthsDiff = $diff->m;
// $diff->d contains the difference in days between the two dates
$daysDiff = $diff->d;
// $diff->h contains the difference in hours between the two dates
$hoursDiff = $diff->h;
// $diff->i contains the difference in minutes between the two dates
$minsDiff = $diff->i;
// $diff->s contains the difference in seconds between the two dates
$secondsDiff = $diff->s;
// Total Days Diff, that is the number of days between the two dates
$totalDaysDiff = $diff->days;
// Dump the diff altogether just to get some details ;)
var_dump($diff);
또한 두 날짜를 비교하는 것이 훨씬 쉽습니다. 다음과 같은 비교 연산자를 사용하십시오.
<?php
// Create a date time object, which has the value of ~ two years ago
$twoYearsAgo = new DateTime("2014-01-18 20:05:56");
// Create a date time object, which has the value of ~ now
$now = new DateTime("2016-07-21 02:55:07");
var_dump($now > $twoYearsAgo); // prints bool(true)
var_dump($twoYearsAgo > $now); // prints bool(false)
var_dump($twoYearsAgo <= $twoYearsAgo); // prints bool(true)
var_dump($now == $now); // prints bool(true)