PHP에서 날짜 시간을 ISO 8601로 변환하는 방법


103

시간 2010-12-30 23:21:46을 ISO 8601 날짜 형식으로 어떻게 변환 합니까? (-_-;)


1
예 @Gordon 내가 가지고 4530 개 결과에 대해 내가 @ 알렉스에서 답을 찾을
와우

@wow 4530 결과 중 질문에 대한 답변이없는 이유를 지적하십시오.
Gordon

1
@Gordon 나는 여전히 A에서 Z로 쓰는 법을 배우고 있지만 그들이 Z에서 A로 쓰는 법을 가르쳐 준다는 것을 발견했습니다 :)
와우

@wow 아니요. 알파벳 ($ from, $ to) 쓰는 법을 가르쳐줍니다. 거의 모두가 사용 date($format, strtotime($dateString))하거나 DateTime그에 상응 하는 객체 를 사용하도록 말합니다 . 해당 기능에 대한 입력 만 다릅니다. 당신이해야 할 모든입니다 PHP는 설명서의 correponding 페이지로 이동 하고 입력이 무엇인지 찾을 수 있습니다.
고든

3
@Gordon 네 맞아요. 나는 알파벳을 알고 이제는 꿀벌 시간을 철자합니다. 내가 올바른 학교에 있기를 바랍니다.
와우

답변:


229

객체 지향

이것이 권장되는 방법입니다.

$datetime = new DateTime('2010-12-30 23:21:46');

echo $datetime->format(DateTime::ATOM); // Updated ISO8601

절차 적

이전 버전의 PHP 또는 절차 코드에 더 익숙한 경우.

echo date(DATE_ISO8601, strtotime('2010-12-30 23:21:46'));

3
질문, 출력은 2010-12-30T23:21:46+1100어떻게 만들 수 2010-12-30T23:21:46+11:00있습니까?
와우

2
@wow 이것을 시도하십시오 preg_replace('/(?<=\d{2})(?=\d{2}$)/', ':', '2010-12-30T23:21:46+1100'). 출력 2010-12-30T23:21:46+11:00합니다.
알렉스


12
date('c', strtotime('2010-12-30 23:21:46'))좋은 @Gordon :
와우

8
을 사용 DATE_ISO8601하면 ISO8601과 약간 다른 날짜 문자열이 생성됩니다 (TZ에서 콜론이 누락되고 ISO8601은 시간이 모두 또는 콜론없이 모두가 될 것으로 예상합니다. 혼합이 아님)- date('c')엄격한 ISO 8601 유효 날짜를 생성합니다. -코드가 엄격한 ISO 8601 datetime 형식을 예상하는 경우 버그를 추적하기 어려울 수 있습니다. 참고 : en.wikipedia.org/wiki/ISO_8601
ckm

38

PHP 5 이후에는 echo date("c");ISO 8601 형식의 datetime 형식을 사용할 수 있습니다 .

http://ideone.com/nD7piL

주석 참고 :

이와 관련 하여이 두 표현식은 기본 형식 인 시간대에 유효합니다 ±[hh]:[mm], ±[hh][mm], or ±[hh].

그러나 + 0X : 00은 정확하고 + 0X00은 확장 된 사용에 적합하지 않습니다. 따라서 사용하는 것이 좋습니다 date("c"). 여기에 비슷한 논의가 있습니다 .


1
와 약간의 차이가 있습니다 DATE_ISO8601. +0X:00+0X00.
Ja͢ck 2014

@ Ja͢ck 이것은 아래 투표가 필요합니까? 약간의 차이는 일반적으로 나쁜 생각입니다.
rybo111

@ rybo111이 답변에 반대 투표 할 이유가 없습니다. 기술적으로, 모두 'c'와는 DATE_ISO8601유효한 ISO8601 시간 표현을 생산하고 있습니다.

대답 할 메모를 추가했습니다.
trante 2015-06-04

@ Ja͢ck DATE_ISO8601는 유효한 ISO8601 표현을 생성하지 않습니다. DATE_ATOM 그래도 않습니다
명백한 선장

4

ISO 8601에서 unixtimestamp로 변환하는 방법 :

strtotime('2012-01-18T11:45:00+01:00');
// Output : 1326883500

unixtimestamp에서 ISO 8601 (시간대 서버)로 변환하는 방법 :

date_format(date_timestamp_set(new DateTime(), 1326883500), 'c');
// Output : 2012-01-18T11:45:00+01:00

unixtimestamp에서 ISO 8601 (GMT)로 변환하는 방법 :

date_format(date_create('@'. 1326883500), 'c') . "\n";
// Output : 2012-01-18T10:45:00+00:00

unixtimestamp에서 ISO 8601 (사용자 지정 시간대)로 변환하는 방법 :

date_format(date_timestamp_set(new DateTime(), 1326883500)->setTimezone(new DateTimeZone('America/New_York')), 'c');
// Output : 2012-01-18T05:45:00-05:00


1

datetime-local에 값을 설정하려고하면

date("Y-m-d\TH:i",strtotime('2010-12-30 23:21:46'));

//output : 2010-12-30T23:21

비슷한 해결책이 수락 된 답변에 주어진 의견에 언급되어 있습니다
sushant047
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.