Kaç Gün Verilen Bir Zaman aralığındaki gerçeklestikten

5 Cevap php

: Bu tür tarihi itibariyle aralığı varsa

1 Ekim 2009 - 20 Ekim 2009

Biz sırasında oluştu kaç Pazartesi hesaplayabilirsiniz

Bu cevabı (3) olacaktır

  M   T   W   T   F   S   S
             *1   2   3   4
  5   6   7   8   9  10  11
 12  13  14  15  16  17  18
 19 *20  21  22  23  24  25
 26  27  28  29  30  31

Biz MySQL yapabilirsiniz, PHP içinde yapılabilir veya olabilir değilse ben bir işlevi oluşturmak gerekir

5 Cevap

SDT = aralığının, aralık edt = bitiş tarihi başlangıç ​​tarihi. Saymak istediğiniz haftanın gününü yansıtmak için '2 'olarak değiştirin.

CREATE FUNCTION NMONDAYS( sdt DATETIME,  edt DATETIME ) 
RETURNS INT DETERMINISTIC RETURN TIMESTAMPDIFF( WEEK, sdt, edt ) 
+ IF( DAYOFWEEK( edt ) >= 2 AND DAYOFWEEK( edt ) < DAYOFWEEK( sdt ),1,0)

MySQL ile mümkünse emin değil. PHP ur var arkadaşım .. bu konuda gitmek için çeşitli yolları .. strtotime kullanarak zaman damgası ve bitiş damgası start almak muhtemelen .. sonra 86.400 ekleyerek ve her artış üzerinde döngü veya damgası bitirmek için başlangıç ​​timestamp şey için bir çalıştırmak tarihini kontrol edin sonra da Pazartesi ve ur sayacı artırmak if ("D", $ MKT) == 'Pazartesi' ve görmek. u fikir verdik .. u oradan kodunu anlamaya olabilir.

Sen gibi bir şey ile başlayabilirsiniz:

select datecol1, TIMESTAMPDIFF(DAY,datecol1,datecol2) as numDays from table;

Sonra PHP, oldukça karayoluyla nasıl pazartesi (bu anlamaya strtotime () size (tarih kullanabilirsiniz) ve) hafta d1 hangi gün bağlı olarak, d1 takip anlamaya edebilir ve sonuç NUMDAYS değeri ayarlayın.

EDIT: denenmemiş kodu, ama genel bir fikir çalışması gerekir:

function daysUntilMonday($date){
    $dayOfWeek = date('w',strtotime($date));  //a number from 0-6, sunday is 0
    $daysTillMonday = (8 - $dayOfWeek) % 7; //modulus is your friend.
    return $daysTillMonday;    
}

function countMondays($start,$numDays){
    $numDays = $numDays - daysUntilMonday($start);
    return floor($numDays/7)+1;
}

Biri kapalı olabilir, ama genellikle doğru bir yaklaşım olmalıdır.

HTH

Sql:

SELECT DATEDIFF(
        ADDDATE('20091001', 9 - CASE WHEN DAYOFWEEK('20091001') = 1 THEN 8
                                     WHEN DAYOFWEEK('20091001') = 2 THEN 9
                                     ELSE DAYOFWEEK('20091001') 
                                END), -- first monday after date1
        ADDDATE('20091020', 2 - CASE WHEN DAYOFWEEK('20091020') = 1 THEN 8
                                     ELSE DAYOFWEEK('20091020') 
                                END)  -- first monday before date2
               )/7 + 1 -- divide the difference by 7 gives number of weeks
                       -- add 1 (nb points = nb intervals + 1)
              ) NbMonday

Ya da bu:

// Pass $date_1, $date_2 as timestamps, $dow as 3-letter abbrev. (e.g. 'Mon').
// Dates can be low to high or high to low.

function dow_between($date_1, $date_2, $dow)
{
    if ($date_2 < $date_1) {
        list($date_2, $date_1) = array($date_1, $date_2);
    }
    for ($num_dow = -1; $date_1 <= $date_2; $num_dow++) {
        $date_1 = strtotime('next ' . $dow, $date_1);
    }
    return $num_dow;
}

Ya sipariş tarihleri ​​işlemek için düzenlenebilir.