남은 날짜 계산하여 처리하기 도움 요청드립니다.

남은 날짜 계산하여 처리하기 도움 요청드립니다.

QA

남은 날짜 계산하여 처리하기 도움 요청드립니다.

본문

안녕하세요.

아래 그림처럼 작성일과 마감일을 목록에 표시하였는데요.. 그 옆에 남은시간을 계산하여 

보이려고 합니다. 고수님들 처리하는 코드 좀 알려 주시면 정말 고맙겠습니다.

3551140233_1615873665.8267.png

 

작성일

<td class="text-center font-11 en">
  <?php echo ($list[$i]['it_time']); //작성일자 ?>
</td>

 

마감일자

<td class="text-center font-11 color-red en">
  <?php echo date("Y년 m월 d일", $list[$i]['pt_end']);//마감일자?>
</td>

 

남은시간

???????

이 질문에 댓글 쓰기 :

답변 3

남은시간

<?php
$date1 = strtotime($list[$i]['it_time']);
$date2 = strtotime($list[$i]['pt_end']);

$timeleft = $date2 - $date1;

$daysleft = round((($timeleft/24)/60)/60); 
echo $daysleft . '일';
?>

<?php
$date1 = strtotime($list[$i]['it_time']);
$date2 = $list[$i]['pt_end'];

$timeleft = $date2 - $date1;

$daysleft = round((($timeleft/24)/60)/60);
echo $daysleft . '일';
?>

정말 감사합니다.. 적용 됩니다..다만 두 시간이 각각 아래와 같은데요..
4일하고 몇시간의 시간차이가 5일이라는 결과 값으로 표현 되네요.. 4일00시 라고 표현 되려면 어떤 상수를 변경해야 할까요??
2021-03-12 02:18:13 ~ 2021-03-16 18:13:00

or

$d1= new DateTime($list[$i]['it_time']);
$d2= new DateTime(date('Y-m-d H:i:s', $list[$i]['pt_end']));
$interval = $d1->diff($d2);
echo $interval->days . '일 ' . $interval->h . '시간;

아. 마르스컴퍼니님.. 문제가 하나 있습니다.
알려주신 코드가 맞기는 한데요.. 제가 원했던 것은 그게 아니었네요...ㅎㅎ
지금 시간으로부터 남은시간이었습니다...
다시 알려 주실 수 있을까요?? 아래처럼 적용하면 될까요?

<?php
$d1= new DateTime($list[$i]['datetime']);
          $d2= new DateTime(date('Y-m-d H:i', $list[$i]['pt_end']));
          $interval = $d1->diff($d2);
        echo $interval->days . '일 ' . $interval->h . '시간'. $interval->i . '분 남음'
?>

$d1= new DateTime(date('Y-m-d H:i:s'));
$d2= new DateTime(date('Y-m-d H:i:s', $list[$i]['pt_end']));
$interval = $d1->diff($d2);
echo $interval->days . '일 ' . $interval->h . '시간;

단순히 몇초 남았다는 건 mysql datediff 나 timestampdiff 를 이용하면 되지만

 

사람이 읽을수 있도록 년월일시분초 를 표시하는건 딱 입맞에 맞는건 찾기 힘들죠 

 

직접 만드시거나 아니면 남이 만든걸 적절히 검색해서 써야 됩니다. ㅎㅎ

 

https://im-developer.tistory.com/55


$it_time = new DateTime($list[$i]['it_time']);
$pt_end = new DateTime($list[$i]['pt_end']);
$interval = $it_time ->diff($pt_end);
//표시 할 곳에
echo $interval->format('%d일 %h시간 %i분 %s초'); 

이렇게 해보세요. 아마 php 버전 5.3 이상부터 될겁니다.

그런데 아마 이런식으로 하면 3월 16일 23시 59분 59초까지가 아니라 3월 16일 00시 00분 00초까지로 인식을 할겁니다.
3월 16일 23시 59분 59초를 원하시면
$it_time = new DateTime($list[$i]['it_time']); 위에

$list[$i]['pt_end'] = $list[$i]['pt_end']. " 23:59:59";
추가해주세요.

글 남겨 주셔서 감사합니다.
알려주신 대로 적용 해 보니 페이지가 깨지는 현상이 생깁니다. 제가 적용을 잘못 한 거 같은데요.
아래와 같습니다. 어디에 적용하면 되는지 한번 더 알려 주시면 고맙겠습니다.

<th scope="col" class="wh-80">남은시간</th>
<th scope="col" class="wh-90">마감시간</th>
<th scope="col" class="wh-40">참여</th>
<th scope="col" class="wh-80">가격</th>
<th scope="col" class="wh-50">포인트</th>
<th scope="col" class="wh-40">조회</th>
</tr>
</thead>
<tbody>
<?php for ($i=0; $i < count($list); $i++) {

$list[$i]['img'] = apms_it_thumbnail($list[$i], 40, 40, false, true);

// 가격
$it_price = str_replace('원','', display_price(get_price($list[$i]), $list[$i]['it_tel_inq']));
$it_price = ($it_price) ? $it_price : '-';

// 포인트
$it_point = '-';
if($list[$i]['it_point']) {
$it_point = ($list[$i]['it_point_type']) ? $list[$i]['it_point'].'%' : number_format($list[$i]['it_point']);
}

// 현재글 스타일 체크
if ($list[$i]['it_id'] == $it_id) {
$tr_css = ' class="list-now"';
$subject_css = ' now';
$num = "<span class=\"red\">열람중</span>";
} else {
$tr_css = $subject_css = '';
$num = '<span class="en">'.$list[$i]['num'].'</span>';
}

// 분류명
$c1 = $list[$i]['ca_id'];
$c2 = $list[$i]['ca_id2'];
$c3 = $list[$i]['ca_id3'];
if($c1) $ca_arr[] = $ca_name[$c1];
if($c2) $ca_arr[] = $ca_name[$c2];
if($c3) $ca_arr[] = $ca_name[$c3];
$ca_list = implode(' / ', $ca_arr);
unset($ca_arr);
?>
<tr<?php echo $tr_css; ?>>
<td class="text-center font-11">
<?php echo $num;?>
</td>
<td class="text-center">
<a href="<?php echo $list[$i]['href']; ?>">
<?php if($list[$i]['img']['src']) {?>
<img src="<?php echo $list[$i]['img']['src'];?>" alt="<?php echo $list[$i]['img']['alt'];?>">
<?php } else { ?>
<i class="fa fa-camera img-fa"></i>
<?php } ?>
</a>
</td>
<td class="list-subject<?php echo $subject_css;?>">
<a href="<?php echo $list[$i]['href']; ?>">
<?php echo $list[$i]['it_name'];?>
<?php if ($list[$i]['pt_comment']) { ?>
<span class="sound_only">댓글</span><small><?php echo $list[$i]['pt_comment']; ?></small><span class="sound_only">개</span>
<?php } ?>
<?php if($list[$i]['pt_num'] >= (G5_SERVER_TIME - (24 * 3600))) { ?>
<img src="<?php echo $list_skin_url;?>/img/icon_new.gif" alt="">
<?php } ?>
</a>
<div class="text-muted font-11 list-cate">
<?php echo item_icon($list[$i]);?>
<?php echo $ca_list;?>
</div>
<td class="text-center font-11 en">
<?php echo ($list[$i]['it_time']); //작성일자 ?>
</td>
<td class="text-center font-11 en">
<?php echo date("Y년 m월 d일", $list[$i]['pt_end']);//마감일자?>
</td>

<?php for ($i=0; $i < count($list); $i++) {

다음에 아래 추가

$pt_end  = $list[$i]['pt_end']. " 23:59:59";
$it_time = new DateTime($list[$i]['it_time']);
$pt_end = new DateTime($pt_end);
$interval = $it_time ->diff($pt_end);

<td class="text-center font-11 en">
<?php echo date("Y년 m월 d일", $list[$i]['pt_end']);//마감일자?>
</td>

다음에 아마 남은시간 들어갈 <td> </td> 있겠죠? 거기에

<?php echo $interval->format('%d일 %h시간 %i분 %s초');  ?>

감사합니다..
처음에 알려 주셨을 때 제가 적용을 해 보았던 형태랑 같은 것 같은데요..그때 깨졌거든요.
아마 제가 잘못 적용한 것 같습니다.
시간 내서 다시 적용해 보겠습니다..바쁘신데 글 남겨 주셔서 감사합니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 77
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT