문제

MySQL 데이터베이스에서 DateTime을 PHP와 함께 ISO 8601 형식의 문자열로 표시하려고하지만 잘못되었습니다.

2008 년 10 월 17 일은 다음과 같이 나옵니다.

이것은 내가 사용하는 코드입니다.

<?= date("c", $post[3]) ?>

$post[3] is the datetime (CURRENT_TIMESTAMP) 내 MySQL 데이터베이스에서.

무엇이 잘못되고 있는지 아이디어가 있습니까?

도움이 되었습니까?

해결책

두 번째 논쟁 date 데이터베이스 타임 스탬프 문자열이 아닌 Unix 타임 스탬프입니다.

데이터베이스 타임 스탬프를 변환해야합니다 strtotime.

<?= date("c", strtotime($post[3])) ?>

다른 팁

사용 DateTime 클래스 PHP 버전 5.2에서 사용할 수 있습니다.

$datetime = new DateTime('17 Oct 2008');
echo $datetime->format('c');

실제로보십시오

PHP 5.4 기준으로 한 라이너 로이 작업을 수행 할 수 있습니다.

echo (new DateTime('17 Oct 2008'))->format('c');

절차 스타일 :

echo date_format(date_create('17 Oct 2008'), 'c');
// Output : 2008-10-17T00:00:00+02:00

객체 지향 스타일 :

$formatteddate = new DateTime('17 Oct 2008');
echo $datetime->format('c');
// Output : 2008-10-17T00:00:00+02:00

하이브리드 1 :

echo date_format(new DateTime('17 Oct 2008'), 'c');
// Output : 2008-10-17T00:00:00+02:00

하이브리드 2 :

echo date_create('17 Oct 2008')->format('c');
// Output : 2008-10-17T00:00:00+02:00

메모 :

1) 사용할 수도 있습니다 'Y-m-d\TH:i:sP' 대안으로 'c' 당신의 형식을 위해.

2) 입력의 기본 시간 구역은 서버의 시간대입니다. 다른 시간대에 입력을 원한다면 시간대를 명시 적으로 설정해야합니다. 그러나 이것은 또한 출력에 영향을 미칩니다.

echo date_format(date_create('17 Oct 2008 +0800'), 'c');
// Output : 2008-10-17T00:00:00+08:00

3) 출력이 입력과는 다른 시간대에 대한 출력을 원한다면 시간대를 명시 적으로 설정할 수 있습니다.

echo date_format(date_create('17 Oct 2008')->setTimezone(new DateTimeZone('America/New_York')), 'c');
// Output : 2008-10-16T18:00:00-04:00

PHP PRE 5의 경우 :

function iso8601($time=false) {
    if(!$time) $time=time();
    return date("Y-m-d", $time) . 'T' . date("H:i:s", $time) .'+00:00';
}

PHP PRE 5의 좋은 기능은 다음과 같습니다. 마지막에 GMT 차이를 추가했는데 하드 코드가 아닙니다.

function iso8601($time=false) {
    if ($time === false) $time = time();
    $date = date('Y-m-d\TH:i:sO', $time);
    return (substr($date, 0, strlen($date)-2).':'.substr($date, -2));
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top