Kaç hafta iki tarih içinde vardır

6 Cevap php

I have starting dates and ending dates in my database (MySQL). How can I get the answer, how many weeks(or days) are inside of those 2 dates? (mysql or php)

Örneğin ben veritabanının bu tür var:

Started and | will_end
2009-12-17 | 2009-12-24
2009-12-12 | 2009-12-26
...

Update to the question:
How to use DATEDIFF? How can I make this to work? or should I use DATEDIFF completly differently?

SEÇ DATEDIFF WHERE id = '110 'my_table DAN' Süresi 'AS (' will_end ',' Başlangıç ​​');

6 Cevap

MySQL MySQL 4.1.1 beri, iki tarih arasındaki gün farkı döndürür datediff hangi vardır.

Kılavuzuna göre, DATEDIFF(expr1,expr2) döner expr1 – expr2 bir tarihten itibaren diğer günlerde de bir değer olarak ifade olduğunu unutmayın. ifade1 ve İFADE2 tarih veya tarih ve zaman ifadeleri vardır. Only the date parts of the values are used in the calculation.

Eğer iki sütun $d1 ve time() o zaman bu basit hat yeterlidir elde $d2 mağaza unix timestamp:

$diffweek = abs($d1 - $d2) / 604800;

Sonra sütunları, DATETIME türü iseniz aksi takdirde:

$diffweek = abs(strtotime($d1) - strtotime($d2)) / 604800;

p / s: 604.800, haftada saniye sayısı (60 * 60 * 24 * 7) olduğu

p/s2: Eğer intval($diffweek) veya round($diffweek) isteyebilirsiniz

Gün sayısını hesaplamak ve yedi bölünmesi size iki tarih arasındaki hafta sayısını vermeyecektir. Bunun yerine, ISO hesaplamada hafta sayısı açısından düşünme her zaman iki tarih arasındaki hafta sayısına tekabül etmediğini 7 ile bölünme sonucu dönecektir.

Örneğin, sadece hesaplamak start_date = "2010-12-26" ve end_date = "2011-01-25" Eğer W51, 52,01,02,03,04 geçiyor olacak ve bu ISO başına 6 haftadır verilmiş, ancak eğer 7 ile fark ve Böl, 5 alırsınız.

Başlangıç ​​tarihi ve bitiş tarihi farklı yıllara ait olduğunda sorun görünür.

Hesaplama yapmak için en iyi yolu, start_date yılın geçen hafta numarasını almak için ve Aralık, 28 bakmalıdır olduğunu.

function weeks($ladate2,$ladate3) {
    $start_week= date("W",strtotime($ladate2));
    $end_week= date("W",strtotime($ladate3));
    $number_of_weeks= $end_week - $start_week;

    $weeks=array();
    $weeks[]=$start_week;
    $increment_date=$ladate2;
    $i="1";

    if ($number_of_weeks<0){
        $start_year=date("Y",strtotime($ladate2));
        $last_week_of_year= date("W",strtotime("$start_year-12-28"));
        $number_of_weeks=($last_week_of_year-$start_week)+$end_week;
    }

    while ($i<=$number_of_weeks)
    {
        $increment_date=date("Y-m-d", strtotime($ladate2. " +$i week"));
        $weeks[]=date("W",strtotime($increment_date));

        $i=$i+1;
    }

    return $weeks;
}

function diff_weeks($ladate2,$ladate3) {
    $weeks=weeks($ladate2,$ladate3);
    $diff_weeks=count($weeks);

    return $diff_weeks;
}

Best regards, Manikam

Her tarih TO_DAYS işlevini kullanmak ve gün içinde farkı hesaplamak için iki çıkarabilirsiniz.

DATEDIFF

Gün bulmak ve 7 bölmek

<?php
  $dayDif    = date('z',strtotime('2009-12-17)') - date('z',strtotime('2009-12-24)');
  $numWeeks  = $dayDif / 7;
?>

PHP'nin tarih fonksiyonu için z seçeneği size yıl (0-365) gününü verir. İki değerler çıkarılarak kaç günde tarihleri ​​arasında bulabilirsiniz. Sonra hafta sayısı için yediye faktör.

Yakından bu sayfayı okuyun, date () fonksiyonu zengindir. http://php.net/manual/en/function.date.php