2009-12-03 2 views
2

시간과 날에 따라 작은 스크립트가 있습니다. 나는 출력 다른 일에 싶습니다 시간 스크립트

  • 시간의 화요일 {날짜} {월에 전달하기 위해 왼쪽 : 그것은 다음과 같은 필요가 월요일에 예를 들어
    <?php 
        $currenttime = ((date("H")+7). ":" .date("i")); 
        if ($currenttime >= "16:30") { 
        $tomorrow = mktime(0, 0, 0, date("m") , date("d")+2, date("Y")); 
        $jsdate = (date("Y"). "-" .date("m"). "-" .(date("d")+1). "-16-30"); 
        } 
        else{ 
        $tomorrow = mktime(0, 0, 0, date("m") , date("d")+1, date("Y")); 
        $jsdate = (date("Y"). "-" .date("m"). "-" .date("d"). "-16-30"); 
        } 
        echo " Time left for delivery on <b><center>" .date("l \\t\h\e jS F", $tomorrow). "</b>:</center>"; 
        ?> 
    <center> 
    <script> 
    // deadline(date, width, height, style, background, number color, small text color); 
    deadline("<? echo $jsdate; ?>", "220", "37", "digital2", "#FFFFFF", "#000099", "#000000"); 
    </script> 
    </center> 
    

    16시 반 전에 }
  • 그런 다음 (사용자보다 servertime 아니라 현지 시간으로하는 것이 바람직.) DD HH MM SS 형식으로 16시 반까지 얼마나 왼쪽을 표시 16시 반 후 다음

을 월요일에이 연구에 필요 EAD : 수요일은 {날짜} {월}에 전달하기 위해 왼쪽

  • 시간
  • 그런 servertime 아닌 것으로 DD HH MM SS 형식 16시 반 (바람직까지 남은 시간을 표시 . 사용자 현지 시간)

그리고 목요일 16:30부터 월요일 16시 반 때까지 읽을 필요가있다 :

  • 시간 deliv 떠났다 의 화요일 {날짜} {월}에 ERY는
  • 그리고 DD HH MM SS 형식 16시 반까지 남은 시간을 표시 (servertime 아니라 사용자에 비해 현지 시간으로하는 것이 바람직.)

이 모든 것이 의미가 있고보기에 감사하기를 바랍니다.

따, B.는

답변

1

당신은 타임 스탬프와 간격을 생성, 비교하고 서식을 한 strtotime과 (PHP 5.3+) 클래스 DateTime를 사용할 수 있습니다.

(당신이 설명한 형식으로을 둘 다 정말 시험을 실시하지 않았으며, 정확히 ) :

<?php 
$now = new DateTime(); 
$deliveries = array(
    'monday' => strtotime('monday 16:30'), 
    'tuesday' => strtotime('tuesday 16:30') 
); 

// timestamps in the past are "advanced" one week 
foreach($deliveries as &$dt) { 
    if ($dt < $now->getTimestamp()) { 
    $dt = strtotime('+1 week', $dt); 
    } 
} 

// get the diff between 'Now' and the next delivery (smallest timestamp in $deliveries) 
$nextDelivery = new DateTime(); 
$nextDelivery->setTimestamp(min($deliveries)); 
$remaining = $nextDelivery->diff($now); 

echo $nextDelivery->format(DateTime::RFC2822), " | ", $remaining->format('%d days %H:%i:%S'), "\n"; 

편집 : 날짜 시간을 사용하지 않고 :

<?php 
$now = time(); 
$deliveries = array(
    'monday' => strtotime('monday 16:30', $now), 
    'tuesday' => strtotime('tuesday 16:30', $now) 
); 

// timestamps in the past are "advanced" one week 
foreach($deliveries as &$dt) { 
    if ($dt < $now) { 
    $dt = strtotime('+1 week', $dt); 
    } 
} 

// get the diff between 'Now' and the next delivery (smallest timestamp in $deliveries) 
$nextDelivery = min($deliveries); 
// (when) a day has exactly 86400 seconds, an hour 3600 seconds, ... 
$remaining = array(
    'days'=> intval(($nextDelivery - $now)/86400), 
    'hours'=> intval(($nextDelivery - $now)/3600) % 24, 
    'minutes'=> intval(($nextDelivery - $now)/60) % 60, 
    'seconds'=> ($nextDelivery - $now) % 60 
); 

echo 'next: ', date(DateTime::RFC2822, $nextDelivery), "\n"; 
printf('remaining: %d days %02d:%02d:%02d', 
    $remaining['days'], $remaining['hours'], $remaining['minutes'], $remaining['seconds']); 
+0

감사합니다. 그러나 다음과 같이 표시됩니다. 정의되지 않은 메서드 DateTime :: getTimestamp() 호출 – Bift

+1

대부분 5.3.0보다 작은 크기의 것을 인쇄합니까? ;-) diff() 메소드도 5.3+이기 때문에 이전 버전의 PHP에서 DateTime을 사용하는 것은 이치에 맞지 않습니다. – VolkerK

+0

5.2.11 -이 버전에서 같은 작업을 수행 할 수있는 방법이 있습니까? – Bift

0

프로그램 없음 수정하지만,이 라인

$jsdate = (date("Y"). "-" .date("m"). "-" .date("d"). "-16-30"); 

도 마찬가지 일 수 있습니다.

$jsdate = date("Y-m-d-16-30"); 

훨씬 더 읽기 쉽습니다.