PHP Tarih fark?

5 Cevap

PHP iki tarihleri ​​karşılaştırmak ve tarihleri ​​kaç gün arayla anlamaya çalışıyorum. Ben bir MySQL veritabanı ilk tarihi kapma yaşıyorum ve ikinci tarih geçerli tarihtir. MySQL veritabanında tarih bu "2010-01-21 15:21:46" gibi görünüyor

$date1 = date("Y-m-d", $product['hold_date'])
$date2 = date("Y-m-d");

Nasıl bu iki tarihi karşılaştırmak ve sadece gün bir miktar iade?

EDIT ---------------------------------------------------------------------------------

Bu çalışır:

$date1 = date(strtotime('2009-12-25 15:21:46'));
$date2 = time();

$secondsDifference = $date2 - $date1;
$days = floor($secondsDifference / 86400);

echo $days;

5 Cevap

$secondsDifference = $date2 - $date1;

Bu DATE2 tarih ve 1 arasındaki saniyedir. Tek bir gelecekte daha yeni / detayli hangi bağlı olarak yeniden düzenlemek gerekebilir. Eğer pozitif bir sayı istiyorsanız bu tabii ki.

Yoksa kullanabilirsiniz:

$secondsDifference = abs($date2 - $date1);

Siz gün sayısını bulmak için basit aritmetik işlemler yapabilir

define("SECONDS_IN_DAY", 60*60*24);
$days = floor($secondsDifference / SECONDS_IN_DAY); // rounds down
// you can use ceil() to round it up.

, Bir saniye biçime MySQL tarih olsun strtotime kullanmak () için

$time = strtotime($mysql_time);

Yani bu do:

$date1 = strtotime($product['hold_date']);
$date2 = time();

Strtotime Unix zaman damgası içine bir tarih / zaman dize dönecek, verilen süre ve unix dönemin arasındaki saniye sayısı (1 Ocak 1970). time function şimdi size unix zaman damgası verecektir.

Daha sonra geçen gün sayısını almak için 86400 (60x60x24) tarafından günler dışında saniye sayısını ve bölmek almak için uzak diğerinden tarih alabilir.

PHP içinde unix mysql tarih zaman dönüştürme alternatif olarak, UNIX_TIMESTAMP MySQL fonksiyonunu kullanabilirsiniz.

Edit: Diğerleri söylediler, muhtemelen bir tamsayı almak zemine istiyorum () veya tavana () gün çıkan sayısı.

Ben tarihleri ​​farkı hesaplamak için MySQL (mümkün olduğunda) kullanmanızı önerebilir miyim? MySQL tarih fonksiyonları çok daha üstün PHP'nin daha vardır. Düşünün:

# with CURDATE() resolving to 2010-01-25, this returns -3
SELECT DATEDIFF( '2010-01-22 15:21:46', CURDATE() );

Yani, ben şimdi böyle bir şey yaptığını hayal:

SELECT
    product_id,
    hold_date
FROM
    products
WHERE
    something = true

Sadece bunu değiştirmek:

SELECT
    product_id,
    hold_date,
    DATEDIFF( hold_date, CURDATE() ) as hold_date_diff_days
FROM
    products
WHERE
    something = true

Eğer damgaları için tarih dönüştürmek varsa, bunu şöyle yapabilirsiniz:

$numDays = floor(($timestamp2 - $timestamp1) / (24 * 60 * 60));

date_diff() de PHP 5.3 bakışla