• 10-04-2015, 16:58:55
    #1
    Üyeliği durduruldu
    Merhaba arkadaşlar,

    Şimdi sistemimde bir sorunla karşılaştım,

    Form aracılığı ile post ettiğim verileri alarak başlangıç tarihi ve bitiş tarihi arasındaki toplam gün sayısını bulmak istiyorum.

    Aynı ay üzerindeki gün sayısını buluyorum fakat 10/04/2015 - 10/05/2015 arasındaki tarihi bulmakta zorlanıyorum. 30 gün vermesi gerekir fakat ay farkını göremediği için sistem boş sonuç veriyor. Yani sonucu yazamıyor.

    Kodlarım aşağıdaki gibidir yardımcı olur musunuz?

    $start2date=$_POST['from'];
    $end2date=$_POST['to'];
    if((!empty($end2date)) or (!empty($start2date))){  
    list($g1,$a1,$y1) = explode(".",$start2date);  
    list($g2,$a2,$y2) = explode(".",$end2date);  
    $t1_timestamp = mktime('0','0','0',$a1,$g1,$y1);  
    $t2_timestamp = mktime('0','0','0',$a2,$g2,$y2);  
    if ($t2_timestamp > $t1_timestamp)
    {
    
    $alsaati=$alissaati.":".$alisdakika;
    $dosaati=$donussaati.":".$donusdakika;
    $saathesapla=$alsaati-$dosaati;
    if(($saathesapla >= "-1")){
    $result = ($t2_timestamp - $t1_timestamp) / 86400;
    echo floor($result);
    }
    else {
    $gunsay = ($t2_timestamp - $t1_timestamp) / 86400;
    $arttir=1;
    $result= $gunsay + $arttir;
    echo floor($result);
    }
    
    
    echo $toplamgun; //sonuc buraya geliyor
    }
    }
    
    ?>
  • 10-04-2015, 17:06:57
    #2
    Fonksiyon işinizi görecektir tarih ayrımında / değilde . kullanın zira sizin kodlarda explode işlemini . göre yapıyor
    	function hesapla($alistarihi,$donustarihi,$alissaati="0",$donussaati="0"){
    		if((!empty($donustarihi)) or (!empty($alistarihi))){  
    			$zaman1 = new DateTime($alistarihi);
    			$zaman2 = new DateTime($donustarihi);
    			$gun 	= $zaman1->diff($zaman2);
    				if ($zaman2 > $zaman1){
    				$saathesapla	= $donussaati-$alissaati;
    					if(($saathesapla <= "0")){
    						$sonuc	=	$gun->format('%a'); 
    					}else {
    						$sonuc	=	($gun->format('%a'))+1;			   
    					}
    				}else{
    					$sonuc 	= 1;	  
    				}
    			return floor($sonuc);	
    		}
    	}
    
    // kullanımı
    echo	hesapla('10.04.2015','10.05.2015');
  • 10-04-2015, 17:10:54
    #3
    date_default_timezone_set('Europe/Istanbul');
    function tarihbul($baslangic,$bitis) { 
    $kes1=explode('/',$baslangic); 
    $kes2=explode('/',$bitis); 
    $time1=mktime(0,0,0,$kes1[1],$kes1[0],$kes1[2]); 
    $time2=mktime(0,0,0,$kes2[1],$kes2[0],$kes2[2]); 
    echo ($time2-$time1)/86400;
    }  
    tarihbul('10/04/2015','10/05/2015');
    Bu sekilde gün sayısını bulursun. Aşağıdakindeyse bu aralıktaki butun günleri.

    <?php
    date_default_timezone_set('Europe/Istanbul');
    function tarihbul($baslangic,$bitis) { 
    $kes1=explode('/',$baslangic); 
    $kes2=explode('/',$bitis); 
    $time1=mktime(0,0,0,$kes1[1],$kes1[0],$kes1[2]); 
    $time2=mktime(0,0,0,$kes2[1],$kes2[0],$kes2[2]); 
    while($time1<=$time2) { 
    $x=date('d/m/Y', ($time1)); 
    echo $x.'<br>'; 
    $time1=$time1+86400; 
    }
    }  
    tarihbul('10/04/2015','10/05/2015');
    ?>
  • 10-04-2015, 17:25:40
    #4
    Üyeliği durduruldu
    By_MiLaT adlı üyeden alıntı: mesajı görüntüle
    Fonksiyon işinizi görecektir tarih ayrımında / değilde . kullanın zira sizin kodlarda explode işlemini . göre yapıyor
    	function hesapla($alistarihi,$donustarihi,$alissaati="0",$donussaati="0"){
    		if((!empty($donustarihi)) or (!empty($alistarihi))){  
    			$zaman1 = new DateTime($alistarihi);
    			$zaman2 = new DateTime($donustarihi);
    			$gun 	= $zaman1->diff($zaman2);
    				if ($zaman2 > $zaman1){
    				$saathesapla	= $donussaati-$alissaati;
    					if(($saathesapla <= "0")){
    						$sonuc	=	$gun->format('%a'); 
    					}else {
    						$sonuc	=	($gun->format('%a'))+1;			   
    					}
    				}else{
    					$sonuc 	= 1;	  
    				}
    			return floor($sonuc);	
    		}
    	}
    
    // kullanımı
    echo	hesapla('10.04.2015','10.05.2015');
    Erturk adlı üyeden alıntı: mesajı görüntüle
    date_default_timezone_set('Europe/Istanbul');
    function tarihbul($baslangic,$bitis) { 
    $kes1=explode('/',$baslangic); 
    $kes2=explode('/',$bitis); 
    $time1=mktime(0,0,0,$kes1[1],$kes1[0],$kes1[2]); 
    $time2=mktime(0,0,0,$kes2[1],$kes2[0],$kes2[2]); 
    echo ($time2-$time1)/86400;
    }  
    tarihbul('10/04/2015','10/05/2015');
    Bu sekilde gün sayısını bulursun. Aşağıdakindeyse bu aralıktaki butun günleri.

    <?php
    date_default_timezone_set('Europe/Istanbul');
    function tarihbul($baslangic,$bitis) { 
    $kes1=explode('/',$baslangic); 
    $kes2=explode('/',$bitis); 
    $time1=mktime(0,0,0,$kes1[1],$kes1[0],$kes1[2]); 
    $time2=mktime(0,0,0,$kes2[1],$kes2[0],$kes2[2]); 
    while($time1<=$time2) { 
    $x=date('d/m/Y', ($time1)); 
    echo $x.'<br>'; 
    $time1=$time1+86400; 
    }
    }  
    tarihbul('10/04/2015','10/05/2015');
    ?>

    Arkadaşlar cevaplarınız için teşekkür ederim @By_MiLaT arkadaşımızın dediği gibi ayrımı . yerine / olarak değiştiridim ve sorunumu çözdüm. Teşekkür ederim
  • 10-04-2015, 17:55:26
    #5
    Kimlik doğrulama veya yönetimden onay bekliyor.
    @Grapxnet; DateTime sınıfını kullanarak bu işlemi basitçe yapabilirsiniz.

    <?php
    
      $a = new DateTimeZone('Europe/Istanbul');
    
      $b = new DateTime('1.2.2015', $a); // 1 Şubat 2015
      $c = new DateTime('1.3.2015', $a); // 1 Mart 2015
    
      $d = $b->diff($c);
    
      echo $d->format('%a gün');