İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

Bana bir mantık üretebilecek misiniz?

E

Erturk

Misafir
Merhaba arkadaşlar.

Web tabanlı bir program yazıyorum. Ama artık kafam allak pullak oldu, takıldığım bu nokta için mantık üretemiyorum. Sorunum şu:


Giriş ve Çıkış olmak üzere 2 tarih verim var. İstediğim, bu iki tarih arasındaki diğer günleride otomatik almak ve veritabanına eklemek.

$giris = '10.02.2011';
$cikis = '20.02.2011';

İki tarih arasındaki farkı alıyorum, lakin 11, 12, 13, 14, ...... 19 tarihlerini nasıl alıcam? Aslında aradaki fark kadar for ile döngüye sokup tarihi arttırabilirim lakin bu seferde ay dönümü sıkıntısı çıkacak. Örnegin şubat 28 cekiyor. 28.02.2011 den sonra 01.03.2011 tarihine devam ettirmem lazım.

Anlatırken bile kafam karmakarışık durumda. Umarım anlamışsınızdır arkadaşlar :peh:

Özetle:

Kullanıcı 27.02.2011 ile 05.03.2011 tarihleri arasında kalmak istiyor. Ve haliyle bu iki tarih arasındaki diğer gunlerde kalacagı oda dolu gorunmesi lazım. Bunu nasıl saglayabilirim.

Bir mantık üretmeme yardımcı olabilecek varmı ? :ıslık:
 
E

Erturk

Misafir
For içinde for kullanamaz mısın?

Hacı, aslında asıl sorun ay dönümleri.

Bugün ayın 5. i diyelim. Girdim siteye ve 10 u ile 15 i arasında rezervasyon yapmak istiyorum. Amacım o tarih arasında yerin dolu olup olmadıgını gostermek. Bunuda şoyle yapmayı planlıyorum.

arsiv diye bir veritabanım olacak. Adam 5 gunluk rezervasyon yaptıysa butun gunler ile birlikte eklenecek.

Erturk Kumas - 10.02.2011
Erturk Kumas - 11.02.2011
Erturk Kumas - 12.02.2011
Erturk Kumas - 13.02.2011
Erturk Kumas - 14.02.2011
Erturk Kumas - 15.02.2011


Daha sonra her tarih için kaç veri oldugunu sorgulatıp stok sayısından düşürücem. 10.02.2011 için kayıtlı olan veri sayısı daha once belirlenen stok sayısıyla aynıysa (dolu) o tarih için rezervasyon istenmeyecek.

Sıkıntı şu ki; Her ayın gün sayısı sabit degil. :eek:ha:
 
T

trgy

Misafir
for ile döngü oluşturup if ile ayları kontrol edebilirsin ona göre 30 veya 31 yapabilirsin. Anladım dediğini benim aklıma gelen çözüm yolu bu. Mutlaka bir betik vardır ama bununla ilgili.
 

Loi

0
İyinet Üyesi
Katılım
13 Kasım 2006
Mesajlar
6,192
Reaction score
44
Konum
localhost
Öncelikle mktime ile giriş ve çıkış tarihlerini dönüştür. Böylelikle gün sayısını aradan çıkarabilirsiniz. For ile gün artırımı yaparak mktime işlemini geri çevirip gerçek tarihleride toplayabilirsin..
 
E

Erturk

Misafir
Ekteki dosyaları inceler misin bi buldum sanırım birşeyler.

Hacı bunun SQL dosyası yok.

Öncelikle mktime ile giriş ve çıkış tarihlerini dönüştür. Böylelikle gün sayısını aradan çıkarabilirsiniz. For ile gün artırımı yaparak mktime işlemini geri çevirip gerçek tarihleride toplayabilirsin..

iki tarih arasındaki farkı almak için mktime zaten kullanıyorum dostum. date(t) ile de sistem tarihindeki ayın kac gun cektiğini buluyorum. ki bunu tamamen kendime gore duzenleyip verdiğim ayın (02 , 03, 04 vs vs) kac cektiğinide buluyorum.

for ile gelen tarihi (ornegin 21.02.2011) o ay kac cektiyse oraya kadar saydırıyorum.

21.02.2011
22.02.2011
23.02.2011
24.02.2011
25.02.2011
26.02.2011
27.02.2011
28.02.2011

Lakin asıl mesele buradan sonra baslıyor.

Adam diyelim ki 04.03.2011 tarihinde cıkıs yapıcak. if kontrolleriyle kontrol yapıp tekrar for içerisine aldım ama sanırım bir yerlerde yanlıs yapıyorum. cunku sonsuz döngüye sokuyor.

Açlıktanmıdır nedir kafam durdu. Halbuki kolay birşeydir hea :(
 

Loi

0
İyinet Üyesi
Katılım
13 Kasım 2006
Mesajlar
6,192
Reaction score
44
Konum
localhost
Erturk,
mktime() ile giriş tarihini ve çıkış tarihini time a çevirip, çıkış tarihinden giriş tarihini çıkar. Çıkan sonucu 86400(24 saat) e böldüğünde ortaya aradaki gün farkını çıkaracaksın

for ile gün sayısı artırımı yaparak,
date(mktime(giriştarihi) + 86400 ) ile bir sonraki günü tespit ettirebilirsin bu şekilde arada 30-31 günleri problemini halledebilirsin.

Sanırım bu yeterli..
 
E

Erturk

Misafir
Erturk,
mktime() ile giriş tarihini ve çıkış tarihini time a çevirip, çıkış tarihinden giriş tarihini çıkar. Çıkan sonucu 86400(24 saat) e böldüğünde ortaya aradaki gün farkını çıkaracaksın

for ile gün sayısı artırımı yaparak,
date(mktime(giriştarihi) + 86400 ) ile bir sonraki günü tespit ettirebilirsin bu şekilde arada 30-31 günleri problemini halledebilirsin.

Sanırım bu yeterli..


Ilk dedigini yapıyorum dostum. Onda sıkıntı yok ama sonrasında for içinde tarih arttıramıyorum :eek:ha:

Bi örnek verebilirmisin?
 
E

Erturk

Misafir
Yaptım.

PHP:
<?php
$baslangic = "28.12.2011";
$bitis = "4.1.2012";
$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]);
$time=$time2-$time1; 
$kalacagigun= ($time/86400); 
while($time1<=$time2) {
$x=date('d.m.Y', ($time1));
echo $x.'<br>';
$time1=$time1+86400;
}
?>
 

Loi

0
İyinet Üyesi
Katılım
13 Kasım 2006
Mesajlar
6,192
Reaction score
44
Konum
localhost
Eline saglik, ben daha sonra baglanamadigim icin denemede yapamamistim.
Konunun basligini degistirip baskalarininda faydalanmasini saglayabiliriz.
 
E

Erturk

Misafir
Eline saglik, ben daha sonra baglanamadigim icin denemede yapamamistim.
Konunun basligini degistirip baskalarininda faydalanmasini saglayabiliriz.

O halde kodu şöyle düzenlemek daha iyi olur. Ben direkt kendi kullandığım şekilde eklemiştim. Konuyu acayım belki faydalı olur birilerine.

PHP:
<?php
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;
}
}
?>



Kullanımı:


PHP:
<?
$baslangic = "10.02.2011"; $bitis = "12.03.2011";
tarihbul($baslangic,$bitis);
?>
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Üst