Ay ve gün PHP dönüştürme damgası

10 Cevap php

Nasıl 2 tarih arasında bir zaman damgası fark dönüştürebilirsiniz

$diff = abs(strtotime($date2) - strtotime($date1));

istenen çıktıya olarak ay ve gün miktar:

$res = 4.05 //-> 4 months and 5 days

10 Cevap

Ay hesaplamak için MySQL kullanarak bir çözüm bulundu:

SEÇ TIMESTAMPDIFF (AY, '{$ start_time_str}', '{$ end_time_str}') m AS

Tüm taraflar için teşekkürler.

Böyle bir şey muhtemelen çalışacaktır. Benim matematik biraz kapalı olabilir.

$diff = abs(strtotime($date2) - strtotime($date1));

define('DAY',60*60*24, true);
define('MONTH',DAY*30, true);
define('YEAR',DAY*365, true);

$years = floor($diff / (YEAR));
$months = floor(($diff - $years * YEAR) / (MONTH));
$days = floor(($diff - $years * YEAR - $months*MONTH ) / (DAY));

Ay uzunluğu değişir gibi böyle bir yaklaşım olamaz - Eğer ortalama aylık uzunluğuna dayalı bir varsayım yapmak istediğiniz sürece. Eğer gerçek tarih kullanmanız gerekir doğru farkı istiyorsanız o zaman php tarih diff kullanabilirsiniz - http://www.php.net/manual/en/datetime.diff.php

For PHP 5.3 you might want to use
http://de.php.net/manual/en/datetime.diff.php

For lower versions you might want to use something like: (Simple solution, not fastest or best)

$days = 0;
$months = 0;
$month = date("n", $time1);
while ($time1 < $time2)
{
    ++$days;
    if (date("n", $time1) != $month)
    {
        $month = date("n", $time1);
        $days = 0;
        $months++;
    }
    $time1 = mktime(0, 0, 0, date("n", $time1), date("j", $time1) + 1, date("Y"));
}

/ / Yasal Uyarı: denenmemiş

Burada yüz olacak en büyük sorun ay tanımlar. Vb 4 hafta = 1 ay, 30 gün = 1 ay, kullanmak için gidiyoruz .. Ben hafta ve gün dönüştürmek, bir gün sayısı olarak rakam bırakın, ya da en fazla iki için cazip olacaktır

Zaman Damgası aslında Unix Epoch, yani 1 Ocak 1970 yılından bu yana saniye sayısıdır. Damgaları farklılıklar aslında saniyedir yüzden. Yani gün içine saniye dönüştürmek için sadece bir gün yani $ Damgası / (24x60x60) saniyede sayısına bölün gerekir. Aynı ayda $ Damgası / (24x60x60x30) için

Ben bu php mevcut olduğunu sanmıyorum. Yani tamsayı bölme (veya normal bölünme) ve modül operatörünü kullanmak zorunda olacak.

Örneğin (örnek yerine ms saat kullanır ama tekrarlanan aynı hiledir):

$totalhours = 27;
$days = round($totalhours / 24);
$hours = $totalhours % 24;

Bu verecektir $ gün = 1 ve $ saat = 3

Diğer cevaplarda belirtildiği gibi. Ayda günlük miktarı sabit değildir, çünkü ay bulmak daha zordur.

Üç ay (01.03.2010 01.01.2010 (gibi tam bir farktır) ay karşılaştırırken bunu bir insandan beklediğiniz farklılıkları ifade etmek mümkün olduğu gibi Sen, DateTime.diff bakmak isteyebilirsiniz .)

Böyle bir fonksiyon, bir gün tarih farkı hesaplayabilirsiniz

function diff_date_day($day , $month , $year , $day2 , $month2 , $year2){
  $timestamp = mktime(0, 0, 0, $month, $day, $year, 0);
  $timestamp2 = mktime(0, 0, 0, $month2, $month2, $year2);
  $diff = floor(($timestamp - $timestamp2) / (3600 * 24)); 
  return $diff; 
}

Make bir varsayım ortalama bir ay 30 gün ve ay sayısını hesaplamak. Bazı (blog yorum yaş, vb görüntüleme) ihtiyaçları ve diğerleri için tamamen uyumsuz için yeterli olabilir.

Ben bu şimdi eski olduğunu biliyorum, ama zaman damgası biçiminde verilen bir dob gelen "3 yıl ve 6 ay" biçiminde zaman farkını hesaplamak için bir şey ararken ben karşıya geldi. Birinin yarayabilecek aşağıdaki yazdı.

// Determine age
$time_start = 'YOUR DOB';
$time_end = strtotime('today');
$years = 0;
$months = 0;
while ($time_start < $time_end){
    $tmp_time = strtotime('+ 1 year', $time_start);
    if ($tmp_time < $time_end){
        $years++;
        $time_start = $tmp_time;
    } else {
        $tmp_time = strtotime('+ 1 month', $time_start);
        if ($tmp_time < $time_end){
            $months++;
            $time_start = $tmp_time;
        } else {
            $time_start = $time_end;
        }
    }
}
$age = $years.' years &amp; '.$months.' months';