DateTime에 PHP 타임 스탬프
이것을 strtotime 또는 비슷한 유형의 값으로 변환하여 DateTime 개체 에 전달하는 방법을 알고 있습니까?
내가 가진 날짜 :
Mon, 12 Dec 2011 21:17:52 +0000
내가 시도한 것 :
$time = substr($item->pubDate, -14);
$date = substr($item->pubDate, 0, strlen($time));
$dtm = new DateTime(strtotime($time));
$dtm->setTimezone(new DateTimeZone(ADMIN_TIMEZONE));
$date = $dtm->format('D, M dS');
$time = $dtm->format('g:i a');
위의 내용은 올바르지 않습니다. 많은 다른 날짜를 반복하면 모두 같은 날짜입니다.
DateTime
객체 를 생성하기 위해 문자열을 타임 스탬프로 변환 할 필요가 없습니다 (사실 생성자는 알 수 있듯이이 작업을 허용하지 않습니다). 날짜 문자열을 DateTime
생성자에있는 그대로 제공 할 수 있습니다 .
// Assuming $item->pubDate is "Mon, 12 Dec 2011 21:17:52 +0000"
$dt = new DateTime($item->pubDate);
그 존재는 당신이, 당신이 사용 그렇게 할 수있는 문자열 대신 사용하고자하는 타임 스탬프이있는 경우 말했다 DateTime::setTimestamp()
:
$timestamp = strtotime('Mon, 12 Dec 2011 21:17:52 +0000');
$dt = new DateTime();
$dt->setTimestamp($timestamp);
수정 (2014-05-07) :
실제로 당시에는 이것을 알지 못했지만 DateTime
생성자 는 타임 스탬프에서 직접 인스턴스 생성을 지원합니다. 이 문서 에 따르면 타임 스탬프 앞에 @
문자를 추가하기 만하면됩니다 .
$timestamp = strtotime('Mon, 12 Dec 2011 21:17:52 +0000');
$dt = new DateTime('@' . $timestamp);
@drrcknlsn 은 시간 문자열을 데이터 시간으로 변환하는 여러 가지 방법이 있다고 주장 하는 것이 옳지 만, 이러한 다른 방법이 시간대를 같은 방식으로 처리하지 않는다는 것을 인식하는 것이 중요합니다.
옵션 1 : DateTime('@' . $timestamp)
다음 코드를 고려하십시오.
date_format(date_create('@'. strtotime('Mon, 12 Dec 2011 21:17:52 +0800')), 'c');
이 strtotime
비트는 시간대 정보를 제거하고 date_create
함수는 GMT ( Europe/Brussels
)를 가정합니다 .
따라서 어떤 서버에서 실행하더라도 출력은 다음과 같습니다.
2011-12-12T13:17:52+00:00
옵션 2 : date_create()->setTimestamp($timestamp)
다음 코드를 고려하십시오.
date_format(date_create()->setTimestamp(strtotime('Mon, 12 Dec 2011 21:17:52 +0800')), 'c');
이것이 동일한 출력을 생성 할 것으로 예상 할 수 있습니다. 그러나 벨기에 서버에서이 코드를 실행하면 다음과 같은 출력이 표시됩니다.
2011-12-12T14:17:52+01:00
date_create
함수 와 달리이 setTimestamp
방법은 'Europe/Brussels'
GMT가 아닌 서버의 시간대 ( 제 경우)를 가정합니다 .
시간대를 명시 적으로 설정
출력이 입력의 시간대와 일치하는지 확인하려면 명시 적으로 설정하는 것이 가장 좋습니다.
다음 코드를 고려하십시오.
date_format(date_create('@'. strtotime('Mon, 12 Dec 2011 21:17:52 +0800'))->setTimezone(new DateTimeZone('Asia/Hong_Kong')), 'c')
이제 다음 코드도 고려하십시오.
date_format(date_create()->setTimestamp(strtotime('Mon, 12 Dec 2011 21:17:52 +0800'))->setTimezone(new DateTimeZone('Asia/Hong_Kong')), 'c')
입력의 시간대와 일치하도록 출력의 시간대를 명시 적으로 설정했기 때문에 둘 다 동일한 (올바른) 출력을 생성합니다.
2011-12-12T21:17:52+08:00
아마도 가장 간단한 해결책은 다음과 같습니다.
DateTime::createFromFormat('U', $timeStamp);
여기서 'U'는 Unix 시대를 의미합니다. 문서를 참조하십시오 : http://php.net/manual/en/datetime.createfromformat.php
내 해결책입니다.
function changeDateTimezone($date, $from='UTC', $to='Asia/Tehran', $targetFormat="Y-m-d H:i:s")
{
$date = new DateTime($date, new DateTimeZone($from));
$date->setTimeZone(new DateTimeZone($to));
return $date->format($targetFormat);
}
참고URL : https://stackoverflow.com/questions/12038558/php-timestamp-into-datetime
'Nice programing' 카테고리의 다른 글
표현식에는 클래스 유형이 있어야합니다. (0) | 2020.11.03 |
---|---|
zend 프레임 워크에서 정확한 SQL 쿼리를 인쇄하는 방법은 무엇입니까? (0) | 2020.11.03 |
다른 함수를 반환하는 함수를 어떻게 작성합니까? (0) | 2020.11.03 |
목록보기에서 긴 클릭 이벤트 후 메뉴 생성 (0) | 2020.11.03 |
PHPStorm 또는 POSTman을 사용하는 XDebug 및 RESTful 서버 (0) | 2020.11.03 |