2012-07-18 14 views
13

Veritabanımdaki öğelerin bir listesini alıyorum, her biri timeago yardımıyla 'x dakika önce' olarak değiştirdiğim bir CURRENT_TIMESTAMP var. Yani bu iyi çalışıyor. Ama sorun şu ki, 30 dakikadan daha kısa olan ürünlerde "YENİ" bir afiş istiyorum. Oluşturulan zaman damgasını nasıl alabilirim (örneğin: 2012-07-18 21:11:12) ve şu anki saatten 30 dakikadan azsa, o öğedeki "YENİ" pankartı yankılanabilir.PHP Zaman damgasının 30 dakikadan daha az olup olmadığını kontrol etme

+0

Hiç kimse ne zaman time() - 30 * 60 kullanmayı önerdiğini merak ediyorum, unix zaman damgalarıyla doğrudan tamsayı olarak kullanılan tek kişi ben değilim. – Mahn

cevap

46

strtotime ("-30 dakika") kullanın ve sonra satırınızın zaman damgasının bundan büyük olup olmadığını görün.

Örnek:

<?php 
if(strtotime($mysql_timestamp) > strtotime("-30 minutes")) { 
$this_is_new = true; 
} 
?> 

Ben damgası 30 dakika önce ne olsun tekrar mysql tarih için Unix zaman damgalarını almak için iki kez buraya strtotime() kullanarak ve ediyorum. 30 dakika öncesindeki zaman damgası, mysql kaydının zaman damgasından daha büyükse, o zaman 30 dakikadan fazla bir süre yaratılmış olmalıdır.

+0

Kısalık için hiçbir nokta görünmez. –

+0

+1. Teşekkürler. Bu, yaptığımdan daha iyi bir yöntem. Şu anda şunu yapabilirim: 'if ($ post_date <(time() - 600))' strtotime() 'yi kullanarak ama normal ingilizceye yerleştirmek, çıkarılması gereken saniye sayısını bulmaktan daha kolaydır :) – Nathan

+0

@ user1511331 Bu cevabı kabul etmelisiniz (bkz. [Bir cevap nasıl cevaplanır?] (Http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)) sana yardım etmiş. – Nathan

6

PHP'nin DateTime nesnesini kullanarak, böyle bir şey deneyin:

$now = new DateTime(); 
$then = DateTime($timestamp); // "2012-07-18 21:11:12" for example 
$diff = $now->diff($then); 
$minutes = ($diff->format('%a') * 1440) + // total days converted to minutes 
      ($diff->format('%h') * 60) + // hours converted to minutes 
      $diff->format('%i');   // minutes 
if ($minutes <= 30) { 
    echo "NEW"; 
} 

Düzenleme: Mike haklı, ben herhangi bir nedenle, sadece %a aslında bu durum gün içinde türünün toplam (döndüren unuttum). Diğerleri zaman formatını görüntülemek içindir. Yukarıdakileri gerçekten çalışacak şekilde genişlettim.

+0

Bu işe yaramaz. Eğer zaman farkı 1 saat 29 dk ise, '$ diff-> formatı (" i ")' 29 olacaktır. – Mike

+0

'$ interval = new DateInterval ('PT1H29M'); echo $ interval-> formatı ('% i dakika'); 'echoes” 29 dakika " – Mike

+0

@Mike Bunu unuttuğumu ve aslında kodun gerçekten test edilmemesi için aldığım şey bu. Ben ** bu kez test ettim ve beklendiği gibi çalışıyor. =) – Crontab

İlgili konular