• 28-05-2014, 16:10:38
    #1
    merhaba arkadaşlar
    php ile iki tarih arasında kaç pazartesi var yada diğer günler kaç adet var bunu öğrenmenin kısa bir yolu var mı?

    örnek
    01.05.2014
    30.06.2014
    arasında kaç adet pazartesi bulunur


    1 haftayı düşünün ve bu hafta içinde 1 pazartesi 1 salı 1 çarşamba var demeli
    2 hafta olursa bu iki katı olacaktır ama 1,5 hafta olursa bu durumda 2pazartesi 2 salı 3 çarşamba 1 perşembe ..... şeklinde olacaktır sonuç. tam olarak bunu nasıl yaparız
  • 28-05-2014, 18:36:33
    #2
    function gunler($basla,$bitir){
    	$basla=strtotime($basla);
    	$bitir=strtotime($bitir);
    	$fark = $bitir-$basla;
    	$gun2=(floor($fark/60/60/24)-floor($fark/60/60/24)%6)/6;
    	$birinci=date('N',$basla);
    	
    	$gun['1']=$gun2;
    	$gun['2']=$gun2;
    	$gun['3']=$gun2;
    	$gun['4']=$gun2;
    	$gun['5']=$gun2;
    	$gun['6']=$gun2;
    	$gun['7']=$gun2;
    	
    	for($i=$birinci;$i<=$birinci+(floor($fark/60/60/24)%6);$i++){		
    		$gun[$i]=$gun[$i]+1;
    	}
    	print_r($gun);
    }
    Dener misin hocam bir çalışma yaptım kısadan test edin ben test işlemi gerçekleştirmedim.
  • 29-05-2014, 15:46:59
    #3
    çok teşekkürler ama istediğim olmadı.

    gunler("01.01.2014","01.02.2014");

    şeklinde denediğimde sonuç olarak
    Array
    (
    [1] => 5
    [2] => 5
    [3] => 6
    [4] => 6
    [5] => 5
    [6] => 5
    [7] => 5
    )

    çıkıyor.

    gerçek takvimde
    ocak ayında
    4 pazartesi
    4 salı
    5 çarşamba
    5 perşembe
    5 cuma
    4 cumartesi
    4 pazar var
  • 29-05-2014, 16:09:53
    #4
    function days($s,$e) {
    		$s = strtotime($s);
    		$e = strtotime($e);
    		
    		$p = 24*60*60;
    		
    		for($i=$s;$i<$e;$i=$i+$p) {
    			if(!$Days[date("l",$i)]) {
    				$Days[date("l",$i)] = 1;
    			} else {
    				$Days[date("l",$i)]++;
    			}
    		}
    		echo "<pre>";
    		print_r($Days);
    		echo "</pre>";
    	}
    bu fonksiyonu kullanarak sayıları dizi içerisine alabilirsiniz.

    Kullanımı :

    days("2014-01-01","2014-02-01");
    Sonuç :

    Array
    (
        [Wednesday] => 5
        [Thursday] => 5
        [Friday] => 5
        [Saturday] => 4
        [Sunday] => 4
        [Monday] => 4
        [Tuesday] => 4
    )
  • 29-05-2014, 17:33:49
    #5
    ChuckyFun Yönteminide kullanabilirsiniz hocam kodlama mantığı daha anlaşılır fakat uzun iki tarih arasında biraz daha yavaş olucaktır.


    function gunler($basla,$bitir){
    	$basla=strtotime($basla);
    	$bitir=strtotime($bitir);
    	$fark = $bitir-$basla;
    	$gun2=(floor($fark/60/60/24)-floor($fark/60/60/24)%7)/7;
    	$birinci=date('N',$basla);
    	
    	$gun['1']=$gun2;
    	$gun['2']=$gun2;
    	$gun['3']=$gun2;
    	$gun['4']=$gun2;
    	$gun['5']=$gun2;
    	$gun['6']=$gun2;
    	$gun['7']=$gun2;
    	for($i=$birinci;$i<$birinci+(floor($fark/60/60/24)%7);$i++){		
    		$gun[$i]=$gun[$i]+1;
    	}
    	print_r($gun);
    }
    gunler("01.01.2014","01.02.2014");
  • 30-05-2014, 10:22:33
    #6
    verdiğiniz bilgiler için çok teşekkür ederim sevgili @Erden35 @ChuckyFun.

    @Erden35 in örneğide oluyor ama tek ay içinde bulabiliyor.

    20.05.2014 - 20.06.2014 dediğimizde array uzuyor ve ilk 7 günden sonra 1 1 1 şeklinde yeni elemanlar türetiyor.

    @ChuckyFun verdiği örnek istediğim gibi oldu. yardımcı olan tüm arkadaşlara teşekkürler.