수색…


통사론

  • 문자열 날짜 (문자열 $ 형식 [, 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)


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow