시간에만 게시글 출력 방식 질문

시간에만 게시글 출력 방식 질문

QA

시간에만 게시글 출력 방식 질문

답변 3

본문

항상 많은 도움 주신분들 감사드립니다.

매일 영업시간인 게시물은 위에서 출력 영업마감된 게시물은 아래에 출력으로 하는데

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 화 해서 비교하시고 원하는 결과를 도출해보세요.

https://www.php.net/manual/en/function.strtotime.php


 
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 {
        // 영업 종료된 게시물 출력
    }
}
답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 225
© SIRSOFT
현재 페이지 제일 처음으로