2026, 새로운 도약을 시작합니다.

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

안녕하세요.

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

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

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개

채택된 답변
+20 포인트

남은시간

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

$timeleft = $date2 - $date1;

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 9개

글 남겨 주셔서 감사합니다.
내용 대로 적용해 보았지만 두 시간의 포멧이 달라서 그런지는 몰라도 전혀 다른 결과 값이 나오네요..연구 해 보겠습니다.
<?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
$daysleft = round((($timeleft/24)/60)/60);
->
$daysleft = floor((($timeleft/24)/60)/60);
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 . '시간;
진정 능력자세요.. 많은 도움 받았습니다.
첫번째 결과 값 : 4일
두번째 결과 값 : 4일 20시간
두번째로 적용하였습니다. 감사합니다..
아. 마르스컴퍼니님.. 문제가 하나 있습니다.
알려주신 코드가 맞기는 한데요.. 제가 원했던 것은 그게 아니었네요...ㅎㅎ
지금 시간으로부터 남은시간이었습니다...
다시 알려 주실 수 있을까요?? 아래처럼 적용하면 될까요?

<?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 . '시간;
두 개가 같은 결과로 나옵니다.. 많이 도와주셔서 감사드립니다.

댓글을 작성하려면 로그인이 필요합니다.

Copy


$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 이상부터 될겁니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 4개

그런데 아마 이런식으로 하면 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초'); ?>
감사합니다..
처음에 알려 주셨을 때 제가 적용을 해 보았던 형태랑 같은 것 같은데요..그때 깨졌거든요.
아마 제가 잘못 적용한 것 같습니다.
시간 내서 다시 적용해 보겠습니다..바쁘신데 글 남겨 주셔서 감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

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

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

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

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

초까지는 필요없구요..그냥 날짜정도만이라도 되면 좋겠는데요..

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고