PHP 타임스탬프를 DateTime에 입력
이것을 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);
즉, 문자열 대신 사용하는 타임스탬프가 있는 경우 다음을 사용하여 사용할 수 있습니다.
$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를 상정하고 있습니다.
따라서 어떤 서버에서 실행하든 출력은 다음과 같습니다.
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
method는 GMT가 아닌 서버(이 경우는 CET)의 타임존을 상정하고 있습니다.
시간대 명시 설정
출력이 입력의 시간대와 일치하는지 확인하려면 명시적으로 설정하는 것이 가장 좋습니다.
다음 코드를 고려합니다.
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 epoch를 의미합니다.다음 문서를 참조하십시오.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
'source' 카테고리의 다른 글
ng-init을 사용하여 스코프 속성을 설정하려면 어떻게 해야 합니까? (0) | 2023.02.10 |
---|---|
mysql 클라이언트(Linux)만 설치하는 방법이 있나요? (0) | 2023.02.06 |
Laravel 웅변 쿼리에서 200만 행까지 시간이 오래 걸린다 (0) | 2023.02.06 |
다음과 같이 SQL 쿼리에서 SQL 테이블과 목록 간의 공통 값 찾기 (0) | 2023.02.06 |
Java Regex 스레드는 안전한가요? (0) | 2023.02.06 |