[PHP]: Tarih farklılıkları ile Mantık

5 Cevap php

Ben şimdi arasındaki sürenin uzunluğuna bağlı olarak zaman formatını değiştirmek için şık bir çözüm ve bir DB ISO format tarih arayan kulüpler.

Ben böyle bir şey bakmak çıkışını istiyorum

//less than an hour
'X minutes have gone by'
//less than 24 hours
'X hours have gone by'
//greater than 24 hours
ISO date

İşte ben bugüne kadar ne var ...

$now = date("o-m-d H:i:s")  //now = something like '2009-12-28 16:39:00'

$dateExample = '2009-12 16:37:00'

$timeSpan = round(strtotime($now) - strtotime($dateExample));

if(($timeSpan/60)<=60)
{
  echo $timeSpan." minutes";
}
if(($timeSpan/(60*60))<=24)
{
  echo ($timeSpan/(60*60))." Hours";
}
else
{
  echo $dateExample;
}

Özensiz ifadeler beni gerçekten rahatsız ve bunu yapmak için daha iyi bir şekilde anlamaya gibi olamaz eğer ....

5 Cevap

İşte bunu yaparken sona erdi nasıl.

$now = date("o-m-d H:i:s");

$timeSpan = round(strtotime($now) - strtotime($lastCheckIn));

$minuteCheck = round($timeSpan/60);
$hourCheck   = round($timeSpan/(60*60));

if($minuteCheck<=60)
{
  echo $minuteCheck." minutes";
}
else if($hourCheck<=24)
{
    echo $hourCheck." hours";
}
else
{
    echo $lastCheckIn;
}

Bütün dakika / saat onay gerçekten çok daha net IMO yapar

Biraz gelişme:

$dateExample = '2009-12 16:37:00'

function timepass($dt){
  $dt = (is_int($dt) ? $dt : strtotime($dt));
  $timeSpan = round(time() - $dt);

  if(($timeSpan/60)<=60){
    return $timeSpan." minutes";
  }elseif(($timeSpan/(60*60))<=24){
    return ($timeSpan/(60*60))." hours";
  }else{
    return date('o-m-d H:i:s',$dt);
  }
}

echo timepass($dateExample);

Eğer gerçekten eğer tabloların kurtulmak değil, ama gelin kodunuzu yoğunlaşmasına ise, bu aynı şeyi yapar:

function timePassed($date) {
     $diff = time() - strtotime($date);
     return $diff > 86400 ? $date : ($diff > 3600 ? ($diff / 3600).' hours' : ($diff / 60).' minutes');
}

echo timePassed('2009-12-29 16:30:00');

Eğer emin değil ama, okunabilirlik için iyi.

Sadece shuffle olabilir Eğer düzeni ile ilgili eğer bir anahtarı içine ise.

Örneğin:

$now = date("o-m-d H:i:s")  //now = something like '2009-12-28 16:39:00'
$dateExample = '2009-12 16:37:00'
$timeSpan = round(strtotime($now) - strtotime($dateExample));

switch(true) {
    case (($timeSpan/60)<=60): { echo $timeSpan." minutes"; break; }
    case (($timeSpan/(60*60))<=24): { echo ($timeSpan/(60*60))." Hours"; break; }
    default: { echo $dateExample; }
}

Yani bu sadece sözdizimsel şeker olduğunu söyledi.

Eğer 'kod kütüphane tarih dönüştürme işlevi okuyucularına açık olma konusunda endişe ediyorsanız, o zaman (thephpdeveloper tarafından yayınlanmıştır fonksiyonunu yeniden) bu şekilde düşünebilirsiniz:

function timepass($dt){
    $timeSpan = round(time() - (is_int($dt) ? $dt : strtotime($dt)));
    $hours = intval($timeSpan / SECONDS_PER_HOUR); // define this somewhere
    $minutes = intval($timeSpan / SECONDS_PER_MINUTE); // define this somewhere

    if($hours == 0) {
        return $minutes.' minutes';
    }
    else if($hours < 24) {
        return $hours.' hours';
    }
    else {
        return ''; // your ISO date logic here
    }
}

Ben eğer kurtulabilirsiniz nasıl görmüyorum, ama şahsen ben bu kod ne dönmek için bir biçimi seçmek için mantık ve her ne durumda döndürülen değer üzerinde süper net olarak görüyorum.