Gün, saat, dakika Unix zaman damgası

4 Cevap php

Yani, bir kullanıcı bir sayfayı yeniden yükler her zaman güncellemeleri last_active adında benim kullanıcıların tabloda bir alan var. Bu Unix zaman damgası saklanan
.

Ben böyle çıktı bunu istiyorum: Last online: 4 d 18 h 19 m ago

Bu nasıl olur? PHP'nin tarih ile bunu yapabilir (?)

Teşekkür ederim.

4 Cevap

İsterseniz MySQL doğrudan bu elde edebiliriz:

select date_format(from_unixtime(current_timestamp - last_timestamp), 
    'Last online: %e days, %k hours, %i minutes, %s seconds ago.');

(Eğer yerinde hesaplanan istiyorsanız current_timestamp unix_timestamp(now()) ile değiştirilebilir)

DATE_FORMAT belirli bir tarihe dayanan özel bir dize olmasını sağlar. Iki zaman damgaları arasındaki fark ile kendi tarihini doldurmak eğer sordunuz gibi, bu iş olacak.

Bir ay altında ise yukarıdaki çözüm sadece çalışacaktır; Eğer yılın günlerini istiyorsanız,% j kullanın. Fonksiyonu için belgeleri daha gösteriyor.

Bu kadar basit yaklaşım time() ile last_active zaman damgası ve mevcut zaman damgası almaktır. Ardından geçerli zaman damgası son etkin çıkarma, ve o zaman sadece bu yüzden saatlerce ve farkı almak için bir saat, günde saniye miktarı farkı almak için bir günde saniye miktarı ile sonuç bölmek.

Bu yaklaşım (, yaş vb sıçrama) bazı özel durumlarda biraz yanlış olabilir ama senin basit usecase için yeterli olacaktır

Bu makaleye göz atın, bu tam olarak neye ihtiyacınız var

http://blog.fedecarg.com/2009/06/25/format-a-time-interval-with-the-requested-granularity/

Ben çözüm bu tür (girdi olarak dakika alır) gerektiğinde ben bu basit işlevi yazdı:

function minutes_to_time($minutes)
{
    $obj = "";

    // extract days
    $days = floor($minutes/(1440)); # Divide on the daily minutes 60 min * 24 hours
    # echo "Days: " . $days;

    // extract hours
    $hours = floor(($minutes-($days*1440))/60);
    # echo " Hours: " . $hours;

    // extract left minutes
    $minutes = ($minutes-($days*24*60)-($hours*60));
    # echo " Minutes: " . $minutes;

    if ($days > 0)
    {
        $obj .= $days . "d ";
    }
    if ($hours > 0)
    {
        $obj .= $hours . "h ";
    }
    if ($minutes >= 0)
    {
        $obj .= $minutes . "m ";
    }

    $obj .= "ago";

    return $obj;
}