itsource

DateTime::createFromFormat을 통해 '2016.04.30 PM 7:30'의 PHP DateTime 인스턴스를 만드는 데 적합한 형식은 무엇입니까?

mycopycode 2023. 10. 4. 21:52
반응형

DateTime::createFromFormat을 통해 '2016.04.30 PM 7:30'의 PHP DateTime 인스턴스를 만드는 데 적합한 형식은 무엇입니까?

저는 현재 워드프레스 프로젝트를 진행중입니다. 여기서 사용자 지정 게시물 메타데이터를 가져와 A로 변환해야 합니다.DateTime예를 들어, 수학을 같이 합니다.

내가.echoget_post_meta는 다음과 같습니다.

2016.04.30 오후 7:30

내가 사용하고 있는 포맷은DateTime예는 다음과 같습니다.

Y.m.d Ag:i

하지만 그 수익은DateTime::createFromFormatfalse.

// 2016.04.30 PM 7:30
$start_at = DateTime::createFromFormat( 'Y.m.d A g:i', get_post_meta(get_the_ID(), 'as_date', true));
if ($start_at === false) {
    echo 'False format: ' . get_post_meta(get_the_ID(), 'as_date', true);
} else {
    echo $start_at->getTimestamp();
}

결과는False format: 2016.04.30 PM 7:30.

내가 뭘 놓치고 있는 거지?사소한 일인 것 같은데 연결이 안 되네요.

테스트를 해보니 형식의 문제문자가 'A'였습니다.그래서 주변을 뒤지다가 PHP에서 버그를 발견했습니다. (분명히 버그는 아닙니다!)

소스코드를 살펴보니 이미 1시간이 지나야 AM과 PM을 파싱할 것 같습니다.

아마도 AM/PM을 끝까지 이동하기 위해 정규식을 빠르게 통과하는 것이 최선의 방법일 것입니다.

$thedate = get_post_meta(get_the_ID(), 'as_date', true);
$thedate = preg_replace("/([0-9.]+) ([ap]m) ([0-9:]+)/i", "$1 $3 $2", $thedate);
$start_at = DateTime::createFromFormat('Y.m.d g:i A', $thedate);

날짜 형식을 변경한 후createFromFormat

$non_standard_format  = '2016.04.30 PM 7:30';
$non_standard_format = str_replace('.','-',$non_standard_format);
$date_components = explode(" ",$non_standard_format);
$standard_format = $date_components[0]." ".$date_components[2]." ".$date_components[1];

그럼 이걸 전달해 보세요.DateTime::createFromFormat

$start_at = DateTime::createFromFormat( 'Y-m-d g:i A', $standard_format);
if ($start_at === false) {
    echo 'False format: ' . get_post_meta(get_the_ID(), 'as_date', true);
} else {
    echo $start_at->getTimestamp();
}

PHP에서 지원되는 날짜 형식

언급URL : https://stackoverflow.com/questions/36784568/whats-the-right-format-to-create-a-php-datetime-instance-of-2016-04-30-pm-730

반응형