채택완료

정규식 날짜값 변환

2020-04-18 (토) 10:59:07 1,900

$_date = str_replace("am", "am", $list[$i]['subject']);
$_date = str_replace("pm", "pm", $list[$i]['subject']);

이와같이 함수를 만들어 호출하였고 결과값은 2020 / 04 / 30 (Thu) pm 16 입니다

2020 / 04 / 30 (Thu) pm 16 이 날짜에 대한 결과값을 정규식으로 변환시키려합니다.

$date = preg_replace('/(.+)/\s+(.+)/\s+(.+)\s+(.+)(am|pm)\s+(.+)/', '$2/$3/$1 $6:00:00', $_date);

결과치는 07/27/2017 17:00:00 이와같은 형태로 나오게 하려고합니다.

정규식 부분을 어떻게 처리하면될까요?

|

답변 2개 / 댓글 2개

채택된 답변
+20 포인트
2020-04-18 (토) 11:30:57

#1. str_replace('am', 'am', ... 무의미한 치환

#2. pm 16 ... 이상한 시간

Copy
/**
 * Escape 처리 ... 2020 \/ 04 \/ 30 \(Thu\) pm 16
 * 그룹 & 패턴 ... (\d+) \/ (\d+) \/ (\d+) \([a-zA-Z]{3}\) [a|p]m (\d+)
 */
$_date = '2020 / 04 / 30 (Thu) pm 16';
$date = preg_replace('/(\d+) \/ (\d+) \/ (\d+) \([a-zA-Z]{3}\) [a|p]m (\d+)/', '$2/$3/$1 $4:00:00', $_date);
// 04/30/2020 16:00:00

* 대부분의 정상적인 날짜시간 문자열이라면 아래처럼 [속도는 느리지만] 간단하게 구할 수 있습니다.

$date = date('m/d/Y H:i:s', strtotime($list[$i]['subject']));

답변에 대한 댓글 1개

2020-04-18 (토) 11:40:36
빠른답변 감사합니다^^
2020-04-18 (토) 11:26:31

정규식을 다 활용한건 아니지만 문자열 처리로 하면 어떨까요?

$_date = preg_replace("/[^0-9]*/s", "", $_date);
$_date = date('m/d/Y H:i:s',strtotime(substr($_date,0,8).'T'.substr($_date,-2).':00:00'));
 

답변에 대한 댓글 1개

2020-04-18 (토) 11:40:42
도움주셔서 감사합니다^^

답변을 작성하려면 로그인이 필요합니다.