PHP tarih / zaman arasındaki farkı hesaplama

5 Cevap

Ben (Armut itibaren) bir Date nesnesi vardır ve saniye zaman farkı almak için başka bir Date nesnesi çıkarmak istiyorum.

Ben birkaç şey denedim ama ilk bana gün içinde farkı verdi ve ikinci beni Date nesnesi unix timestamp bir sabit zaman dönüştürmek değil sağlayacak.

        $now = new Date();
        $tzone = new Date_TimeZone($timezone);
        $now->convertTZ($tzone);
        $start = strtotime($now);
        $eob = strtotime("2009/07/02 17:00"); // Always today at 17:00

        $timediff = $eob - $start;

** Not ** Her zaman 24 saatten az bir fark olacaktır.

5 Cevap

Hala biraz yanlış değerler verdi ama belki sizin için çalışıyor ya da size nasıl çözülebileceğine ilişkin bir ipucu verir, etrafında ARMUT Tarih eski bir sürümü var düşünüyor :)

<pre>
<?php
  require "Date.php";

  $now = new Date();
  $target = new Date("2009-07-02 15:00:00");

  //Bring target to current timezone to compare. (From Hawaii to GMT)
  $target->setTZByID("US/Hawaii");
  $target->convertTZByID("America/Sao_Paulo");

  $diff = new Date_Span($target,$now);

  echo "Now (localtime): {$now->format("%Y-%m-%d %H:%M:%S")} \n\n";
  echo "Target (localtime): {$target->format("%Y-%m-%d %H:%M:%S")} \n\n";
  echo $diff->format("Diff: %g seconds => %C");
?>
</pre>

> String - -> damgası güvenilir çalışacaktır Eğer Armut Date nesnesinin dönüşüm emin misiniz? Burada yapılıyor budur:

$start = strtotime($now);

Bir alternatif olarak göre böyle damgası olsun documentation olabilir

$start = $now->getTime();

Yapabileceğiniz 17:00 kadar saniye 'bulmak için, armut olmadan bunu yapmak için:

$current_time = mktime (); 
$target_time = strtotime (date ('Y-m-d'. ' 17:00:00')); 
$timediff = $target_time - $current_time;

Bunu test, ama ne gerek yapmalıyım değil.

Ben strtotime için tüm Date nesnesi geçen gerektiğini sanmıyveyaum. Yerine bunlardan birini kullanın;

$start = strtotime($now->getDate());

veya

$start = $now->getTime();

Belki bazı millet istiyor zaman farkını facebook yol var. Bu "bir dakika önce" ya da "2 gün önce", vs size söyler .. İşte benim kod:

function getTimeDifferenceToNowString($timeToCompare) {

        // get current time
        $currentTime = new Date();
        $currentTimeInSeconds = strtotime($currentTime);
        $timeToCompareInSeconds = strtotime($timeToCompare);

        // get delta between $time and $currentTime
        $delta = $currentTimeInSeconds - $timeToCompareInSeconds;

        // if delta is more than 7 days print the date
        if ($delta > 60 * 60 * 24 *7 ) {
            return $timeToCompare;
        }   

        // if delta is more than 24 hours print in days
        else if ($delta > 60 * 60 *24) {
            $days = $delta / (60*60 *24);
            return $days . " days ago";
        }

        // if delta is more than 60 minutes, print in hours
        else if ($delta > 60 * 60){
            $hours = $delta / (60*60);
            return $hours . " hours ago";
        }

        // if delta is more than 60 seconds print in minutes
        else if ($delta > 60) {
            $minutes = $delta / 60;
            return $minutes . " minutes ago";
        }

        // actually for now: if it is less or equal to 60 seconds, just say it is a minute
        return "one minute ago";

    }