2013-09-24 3 views
0

날짜 카운트 다운을위한 PHP 코드를 수정할 필요 (카운트가 0에 도달하면 아무것도 표시하지 할) 개월, 주, 일로 세분화 된 특정 날짜에 대한 텍스트 시각적 카운트 다운을 표시합니다. 훌륭하게 작동합니다. 그러나 카운트 다운이 실제 이벤트 날짜에 도달 한 다음 이벤트 날짜를 초과하면 여전히 절대적인 차이를 보여줍니다. 대신이 코드에서 아무 것도 표시하지 말고 (화면 출력 없음). 이 코드를 설명대로 수정하는 방법에 대한 지침을 주시면 감사하겠습니다.날짜 카운트 다운을위한 PHP 코드를 수정할 필요</p> <p>나는 다음과 같은 코드를 사용하고 있습니다 (카운트가 0에 도달하면 아무것도 표시하지 할)

 $d1 = new DateTime(); // now 
    $d2 = new DateTime('2014-01-08'); // set the date +1 to compensate for 1-day 
     error in script 
    $diff = $d2->diff($d1); 
    list($y,$m,$d) = explode('-', $diff->format('%y-%m-%d')); 
    $months = $y*12 + $m; 
    $weeks = floor($d/7); 
    $days = $d%7; 
    printf('Countdown To Event - '); 
    if ($months) {printf('%d month%s ', $months, $months>1?'s':'');} 
    if ($weeks) {printf('%d week%s ', $weeks, $weeks>1?'s':'');} 
    if ($days) {printf('%d day%s ', $days, $days>1?'s':'');} 

답변

0

이 시도 : 현재 날짜가 카운트 다운 날짜보다 더 큰 경우

<?php 

$d1 = new DateTime(); // now 
$d2 = new DateTime('2014-01-08'); // set the date +1 to compensate for 1-day 
$diff = $d2->diff($d1); 

list($y,$m,$d) = explode('-', $diff->format('%y-%m-%d')); 
if ($d1 < $d2) { 
    $months = $y*12 + $m; 
    $weeks = floor($d/7); 
    $days = $d%7; 
    printf('Countdown To Event - '); 
    if ($months) {printf('%d month%s ', $months, $months>1?'s':'');} 
    if ($weeks) {printf('%d week%s ', $weeks, $weeks>1?'s':'');} 
    if ($days) {printf('%d day%s ', $days, $days>1?'s':'');} 
} 

그래서 단순히 헛수하지 않습니다.

+0

예, 매력처럼 작동합니다. 지금은 가장 간단합니다. 덕분에 – user2398188

1

차이가 양수인지 음수인지 확인해야합니다. diff 메서드는 DateInterval을 반환하므로 invert 속성을 확인할 수 있습니다.

$d1 = new DateTime(); // now 
$d2 = new DateTime('2014-01-08'); 

$diff = $d2->diff($d1); 
if ($diff->invert == 1) // the countdown is running 
{ 
    list($y,$m,$d) = explode('-', $diff->format('%y-%m-%d')); 
    $months = $y*12 + $m; 
    $weeks = floor($d/7); 
    $days = $d%7; 
    printf('Countdown To Event - '); 
    if ($months) {printf('%d month%s ', $months, $months>1?'s':'');} 
    if ($weeks) {printf('%d week%s ', $weeks, $weeks>1?'s':'');} 
    if ($days) {printf('%d day%s ', $days, $days>1?'s':'');} 
} 
else 
{ 
    // The countdown finished, do something! 
} 
+0

감사합니다. 그게 효과가 하나의 옵션. 지금은 간단한 if ($ d1 <$ d2) {} 제안으로 갈 것입니다. – user2398188

1

그것을 할 수있는 방법의 많음이있다 ...

나는 쉽게 하나가 생각 :

코드의 조각이 정말 나쁜 보이는 그러나
$FinalDate='2013-09-23'; 
$d1 = new DateTime(); // now  
$d2 = new DateTime($FinalDate); // set the date +1 to compensate for 1-day 

$diff = $d2->diff($d1); 
list($y,$m,$d) = explode('-', $diff->format('%y-%m-%d')); 
$months = $y*12 + $m; 
$weeks = floor($d/7); 
$days = $d%7; 

if(strtotime($FinalDate)>time()){ 
printf('Countdown To Event - '); 
if ($months) {printf('%d month%s ', $months, $months>1?'s':'');} 
    if ($weeks) {printf('%d week%s ', $weeks, $weeks>1?'s':'');} 
    if ($days) {printf('%d day%s ', $days, $days>1?'s':'');} 
}else{ 
    echo "Actions AFTER the date"; 
} 

, 당신은 많은 그것을 할 수 보다 나은. 자바 스크립트로 할 수 있으며 멋진 초 카운터도 넣을 수 있습니다!

+0

감사합니다. 그게 효과가 하나의 옵션. 지금은 간단한 if ($ d1 <$ d2) {} 제안으로 갈 것입니다. – user2398188