시간에만 게시글 출력 방식 질문
본문
항상 많은 도움 주신분들 감사드립니다.
매일 영업시간인 게시물은 위에서 출력 영업마감된 게시물은 아래에 출력으로 하는데
20:00~다음날 06:00 으로 하니 영업시간인데도 영업마감쪽으로 출려되더라구요
제가 코드를 잘못 넣은건지 아니면 간단히 할수있는 방법이라든지 검색 단어 조언좀 부탁드리겠습니다 ㅠ
for ($i=0; $i < $list_cnt; $i++) {
$allday = date("Ymd");
$allnow = date("H:i");
$startTime = $list[$i]['wr_1'];
$endTime = $list[$i]['wr_2'];
if ($allnow>= $startTime && $allnow <= $endTime) {
영업시간인 게시물 출력
}
// 리스트
for ($i=0; $i < $list_cnt; $i++) {
$allday = date("Ymd");
$allnow = date("H:i");
$startTime = $list[$i]['wr_1'];
$endTime = $list[$i]['wr_2'];
if ($allnow < $startTime || $allnow > $endTime) {
영업시간 이외 게시물 출력
}
답변 3
당연하죠
현재시각 23시인 경우 시작시각 보다 크지만 종료시각(06시)보다 작을 수가 없으니 조건이 거짓이 됩니다
다음처럼
if ( ($allnow>= $startTime && $allnow<= '24:00') || ($allnow >='00:00' && $allnow <= $endTime) {
영업시간인 게시물 출력
if ( $allnow >$endTime && $allnow < $startTime) {
영업시간 이외 게시물 출력
=========================
$allday = date("Ymd"); <==이것은 for문 내에 넣어서 loop할때마다 다시 실행할 것이 아니라
for문 위에 넣어서 한번만 실행 하도록 하세요
시간에 대해 strtotime() 로 timestamp 화 해서 비교하시고 원하는 결과를 도출해보세요.
function isOpenNow($startTime, $endTime) {
$now = new DateTime();
$start = DateTime::createFromFormat('H:i', $startTime);
$end = DateTime::createFromFormat('H:i', $endTime);
// 종료 시간이 시작 시간보다 이르면 (자정을 넘어가는 경우)
if ($end < $start) {
$end->modify('+1 day');
// 현재 시간이 자정 이전이면, 시작 시간도 전날로 조정
if ($now < $end) {
$start->modify('-1 day');
}
}
return ($now >= $start && $now <= $end);
}
// 사용 예시
for ($i = 0; $i < $list_cnt; $i++) {
$startTime = $list[$i]['wr_1'];
$endTime = $list[$i]['wr_2'];
if (isOpenNow($startTime, $endTime)) {
// 영업 중인 게시물 출력
} else {
// 영업 종료된 게시물 출력
}
}