PHP에서 날짜 형식을 변경하려면 아래와 같은 코드를 사용할 수 있습니다.
예제
<?php
function string_convert ($my_date){
$sec = strtotime($my_date);
$my_date = date("Y-m-d H:i", $sec);
$my_date = $my_date . ":00";
echo $my_date;
}
$my_date = "23/11/2020 11:59 PM";
string_convert($my_date);
?>출력 결과
1970-01-01 00:00:00
위 코드에는 string_convert라는 함수가 정의되어 있으며, 이 함수는 날짜 문자열을 매개변수로 받습니다. 함수 내부에서는 strtotime() 함수를 사용해 영문 텍스트 형태의 시간을 UNIX 타임스탬프(초 단위 정수)로 변환합니다.
$sec = strtotime($my_date);
$my_date = date("Y-m-d H:i", $sec);
$my_date = $my_date . ":00";date() 함수는 변환된 타임스탬프를 "Y-m-d H:i", 즉 연도-월-일 시:분 형태의 문자열로 바꿔 줍니다. 그다음 초 단위에 해당하는 ":00"을 문자열 뒤에 붙여 최종적으로 "Y-m-d H:i:s" 형태를 완성합니다.
함수 외부에서는 변환할 날짜 문자열이 정의되며, 이 값을 인자로 전달해 함수를 호출한 후 결과를 화면에 출력합니다.
참고: 출력 결과가 1970-01-01로 나오는 이유
예제의 입력값 "23/11/2020 11:59 PM"은 일/월/년(D/M/Y) 순서로 작성되어 있습니다. 그러나 PHP의 strtotime()은 슬래시(/)로 구분된 날짜를 미국식 표기인 월/일/년(M/D/Y)으로 해석하기 때문에, 23이라는 값은 유효한 월이 아니어서 파싱에 실패하고 false를 반환합니다. 이 경우 타임스탬프가 0으로 처리되어 기준 시점인 1970-01-01 00:00:00이 출력됩니다.
정상적인 결과를 얻으려면 strtotime()이 인식할 수 있는 형식으로 날짜를 전달해야 합니다.
<?php
$my_date = "11/23/2020 11:59 PM"; // M/D/Y 형식
echo date("Y-m-d H:i:s", strtotime($my_date)); // 2020-11-23 23:59:00
?>또는 DateTime 클래스를 활용하면 지정된 형식의 날짜를 더 안전하고 유연하게 변환할 수 있습니다.
<?php
$date = DateTime::createFromFormat("d/m/Y h:i A", "23/11/2020 11:59 PM");
echo $date->format("Y-m-d H:i:s"); // 2020-11-23 23:59:00
?>