php datetime 포맷 스트링 변수 비교 질문
본문
$date1 = "2023-03-20";
$date2 = "2023-03-21";
if($date1 < $date2){
echo "\$date2 가 큼";
}
else{
echo "\$date2 가 작음";
}
이렇게 해도 동작하네요
ymb his 포맷으로 비교해도 동작확인되고요
꼭 strtotime()함수를 써써 타임스탬프로 바꾸어 비교해야 하나요?
챗 gpt는 무조건 strtotime()함수 나 date 오브젝트로 바꾸어야 비교된다고 해서 헷갈리네요
php 내부적으로 스트링변수도 date 나 time 포맷이면 알아서 변환해서 비교해주는 건가요?
답변 3
날짜와 시간은
숫자로나열해도 실제로 미래일자가 과거일자보다 크기때문에
단순비교(문자열비교)를 해도
문자열자체가 Unicode 등에서도 더 큰자리에 할당되어 비교가 가능합니다
그런데, 중간에 특수문자가 오작동할수도있는것이라 안심할수는 없습니다.
PHP변수로 비교하면
시간으로 변경되서 더 정확한 비교가 가능한게 맞습니다.
또다른 방법으로
DB의 시간비교를 활용하는 방법도있습니다.
// db를 이용한 비교 예제
$sql = "select if(date({$date1}) < date({$date2}), 1, 0) chk ";
$row = sql_fetch($sql);
if ($row['chk']) {
//참일때 date1이 작을때
}
else {
// 거짓일때 date1이 작지 않을때
}
인간이 보기엔 시간이지만 php입장에서는 문자열일 뿐입니다
따라서 문자열비교는 사전순서로 비교가 됩니다
형식이 동일한 시간 비교는 strtotime같은 시간변환 필요없이 문자열 비교만으로 충분합니다
크기 비교는 숫자여야 하는데, 위 코드는 문자열이니 당연한 거 아닐련지....
답변을 작성하시기 전에 로그인 해주세요.