Günün script zamanı

2 Cevap php

Ben zaman ve gün bağlı küçük bir komut dosyası var; Ben çıkış farklı şeyler için bunu istiyorum:

<?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>

Pazartesi günü Örneğin 16:30 önce aşağıdakilere ihtiyacınız olacaktır:

  • Zaman Salı günü teslimat için {month} {} tarihini bıraktı
  • Sonra uzun GG SS DD SS formatında 16:30 kadar sola göstermek (yerine kullanıcıların yerel zaman daha servertime olması Tercih.)

Sonra Pazartesi günü 16:30 'dan sonra okumak gerekir:

  • Zaman Çarşamba {month} {tarih} teslimat için bıraktı
  • Then display how long left until 16:30 in DD HH MM SS format(Preferable to be servertime rather than users local time.)

Sonra Perşembe günü 16:30 'dan Pazartesi 16:30 kadar okumak gerekir:

  • Zaman Salı günü teslimat için {month} {} tarihini bıraktı
  • Then display how long left until 16:30 in DD HH MM SS format(Preferable to be servertime rather than users local time.)

Ben bu her anlamda ve seyir için teşekkürler yapmak umuyoruz.

Ta, B.

2 Cevap

Oluşturabilir, karşılaştırın ve damgaları ve aralıklarını biçimlendirmek için strtotime ve (php 5.3 +) sınıfı DateTime kullanabilirsiniz.

örneğin (Ne gerçekten test ne exactly biçiminde size tarif ettik):

<?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";

edit: DateTime kullanmadan:

<?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']);

Program için bir düzeltme, ancak bu hat

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

Olabilecek gibi kolay

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

Bu çok daha okunabilir.