PHP de Takvim Oluşturmak
28 Aralık 2008, admin
Bu yazıda PHP kullanarak kendi web tabanlı takviminizi nasıl oluşturacağınızı öğreneceksiniz. Bu takvim iki bölümden oluşmaktadır. Üst kısımda önceki ve sonraki ayların linkleri, altta ise takvimin kendisi bulunmaktadır. Seçilmiş ay ismini takip eden yıl ve ayın günlerini tablo şeklinde göstermektedir. Geliştirmenize yardımcı olması için iyi bir PHP düzenleyicisine ihtiyaç duyabilir ya da yeterince deneyimli iseniz Notepad gibi kolay anlaşılır bir metin düzenleyici kullanabilirsiniz.
Öncelikle parametrelerimizi nasıl taşıyacağımıza karar vermemiz gerekmektedir. Değerleri ‘hidden’ input alanı içinde html kod olarak veya URL yoluyla taşıyabiliriz. Bu yazıda ikinci yöntemi kullanacağız. Biri “ay” için diğeri “yıl” için olan iki ayrı parametreye ihtiyaç duyacağız. Ayrıca ay isimlerinin olduğu bir diziye ihtiyacımız var.
$aylar = Array("Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık");
İlk olarak parametrelerimize değer verilmiş mi diye kontrol etmemiz gerekiyor. Eğer değer verilmemiş ise biz kendimiz şuanki ay ve yıl değerlerini vermeliyiz. ( date() fonksiyonu için ayrıntılı bilgi önceki yazımızda mevcut)
if (!isset($_REQUEST["ay"])) $_REQUEST["ay"] = date("n");
if (!isset($_REQUEST["yil"])) $_REQUEST["yil"] = date("Y");
Takvimimiz içinde kullandığımız diğer değişkenlerinde değerlerini atamalıyız.
$ay = $_REQUEST["ay"];
$yil = $_REQUEST["yil"];
$onceki_yil = $yil;
$sonraki_yil = $yil;
$onceki_ay = $ay-1;
$sonraki_ay = $ay+1;
if ($onceki_ay == 0 ) {
$onceki_ay = 12;
$onceki_yil = $yil - 1;
}
if ($sonraki_ay == 13 ) {
$sonraki_ay = 1;
$sonraki_yil = $yil + 1;
}
$ay ve $yil değişkenleri takvimdeki şuan ki ay ve yılı göstermek için kullanılmakta. “<<” ve “>>” linkleri karşılığı için parametrelere ihtiyacımız var. $onceki_yil ve $sonraki_yil şimdiki için ayarlıyoruz. Daha sonra bunu değiştirebiliriz, şimdilik bu yeterli. Ayrıca sonraki ve önceki ay parametreleri içinde sırasıyla 1 ekleyerek ve çıkararak değerlerini atayalım. Şimdi parametrelerimizin limitin altına veya üstüne çıkıp çıkmadığını kontrol etmeliyiz. Bir yılda 12 ay olduğuna göre eğer parametre 13’e geldiyse diğer bir yıla geçmişiz demektir ve parametremizi tekrar 1’e (Ocak) getirmeliyiz ve yıl ‘yil’ parametremize 1 eklemeliyiz. Öte yandan, biz zamanda geriye döndüğümüzde ve ‘ay’ parametremiz 0’a gider. Dolayısıyla ‘yıl’ parametremizi 1 azaltmalıyız ve ay parametresini 12 (Aralık) olarak ayarlamalıyız. Şimdi önceki ve sonraki aylar için linklerimizi ayarladığımıza göre takvimin nasıl yapıldığına dönebiliriz.
Takvimimizi yerleştireceğimiz bir tablo yaratalım. Sonra tabloya günlerin belirtildiği bir satır ekleyelim. Ayrıca ilk satır ayın ismi ve yılı içermektedir. Ama diziler sıfırdan başladıklarından doğru ismi elde etmek için “ay” parametresinin değerinden 1 çıkarmamız gerekir.
<table width="200">
<tr>
<td align="center">
<table width="100%" border="0" cellpadding="2" cellspacing="2">
<tr align="center">
<td colspan="7" bgcolor="#999999">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="20%" align="left"> <a href="<?php echo $_SERVER["PHP_SELF"] . "?ay=". $onceki_ay . "&yil=" . $onceki_yil; ?>" style="color:#FFFFFF"><<</a></a></a></td>
<td align="center" style="color:#FFFFFF"><strong><?php echo $aylar[$ay-1].' '.$yil; ?></strong></td>
<td width="20%" align="right"><a href="<?php echo $_SERVER["PHP_SELF"] . "?ay=". $sonraki_ay . "&yil=" . $sonraki_yil; ?>" style="color:#FFFFFF">>></a> </td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Pa</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Pt</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Sa</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Ça</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Pe</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Cu</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Ct</strong></td>
</tr>
Şimdi takvimimiz için düzgün tarihleri ayarlayalım. Tarihlerin sayı karşılıklarını girerek bu işi kolayca halledebiliriz. Seçili ayın günlerinin sayısını ve ayın ilk gününün sayısal karşılıklarını alacağız (Pazar için 0 olmak üzere 6 Cumartesi) . Bütün bu fonksiyonlar php manüelinde açıklanmaktadır. Tarihleri çıkaracak olan döngümüz sıfırda başlıyor çünkü haftanın günleri 0 (pazar) dan başlıyor. Ayın ilk gününün dengi artı günlerin sayısı boyunca döngü yapar. Her hafta için yeni bir sıra yazdırmalıyız. Bir haftadaki günlerin sayısı olan 7′yi mod kabul ediyoruz ve sayıların bu mod sisteminde değerlerini kontrol ediyoruz. Eğer sıfıra eşitse haftanın başlangıcı oluyor ve açık sıra tagi <tr> yazdırıyoruz, eğer haftanın sonu ise 6; bu hafta için kapalı sıra tagi </tr> yazdırıyoruz. Yapmamız gereken yazdırdığımız günün cumartesiden önce olup olmadığını kontrol etmek. Bu durumda boş tag yazdırıyoruz. Aksi durumda tarihi yazdırmamız gerek. Bunu cumartesiyi çıkararak yapıyoruz. Bir eklemek gerekiyor çünkü tarihlerin 0 dan başlamasını istemeyiz.
<?php
$zaman = mktime(0,0,0,$ay,1,$yil);
$maxgun = date("t",$zaman);
$buay = getdate ($zaman);
$ilkgun = $buay['wday'];
for ($i=0; $i<($maxgun+$ilkgun); $i++) {
if(($i % 7) == 0 ) echo "<tr>\n";
if($i < $ilkgun) echo "<td style=\"color:#FFFFFF\"></td>\n";
else echo "<td align='center' valign='middle' height='20px' style=\"color:#FFFFFF\">". ($i - $ilkgun + 1) . "</td>\n";
if(($i % 7) == 6 ) echo "</tr>\n";
}
?>
Şimdi son adımı yazıp takvimi bitiriyoruz.
</table>
</td>
</tr>
</table>
Bu yazıda anlatılan takvim örneğine burdan bakabilirsiniz.

(3 votes, average: 4,33 out of 5)
Ocak 21st, 2009 on 16:31
Öncelikle teşekkürler kod için fakat bir sorum olacak.
Geri ve İleri tuşları yerine selectbox ile seçeceğimiz bi aya gitmesini nasıl sağlayabiliriz ?
Ocak 22nd, 2009 on 17:56
İlgin için teşekkür ederim ben de.
Tablonun üst kısmını selectbox yapacaksan en tepedeki önceki ve sonraki ay yıl hesaplamalarına gerek kalmayacağı için o kısmı kaldırırsın.
Okların olduğu yere ay ve yıl seçtireceğin selectboxların olduğu bir form eklersin. Birde submit butonu koyduğunda form metoduna göre get veya post ile tekrar ay ve yıl değerlerini alarak çalıştırabilirsin.
Kolay gelsin.
Ocak 22nd, 2009 on 18:27
1
2
3
4
…
bu şekilde selectboxu oluşturuyorum bunda herhangi bi sorun yok html kısmı tamam fakat php kısmında POST olayını beceremiyorum.
<?php
if(isset($_POST['dolduramadim']))
{
echo “Ay : ” . $_POST['dolduramadim'] .
“”;
}
?>
dolduramadim kisimlarini “aysec” olarak denedim olmadı. $ay olarak doldurdum olmadı. bu kısımda takıldım POST olayında yardımcı olabilirseniz çok sevinirim. Teşekkürler.
Ocak 22nd, 2009 on 18:29
“aysec” dediğim selectbox’a atadığım isim yukarda html ile olan kısmıda yazmıştım ama o kısım gözükmemiş. Zaten selectbox ile ayları yılları vs. oluşturabiliyorum fakat dediğim gibi POST olayında bi yerlerde eksiğim var.
Ocak 22nd, 2009 on 18:39
selectbox etiketinde name kısmına ne kullandıysan post kısmında onu çağırman gerekiyor yani örnek vermek gerekirse
şeklinde
Ocak 22nd, 2009 on 19:25
Çok teşekkür ederim. Sonunda halledebildim.
Nisan 7th, 2010 on 14:44
YA TEŞEKKÜR ETMEDEN GEÇEMEDİM. ALLAH RAZI OLSUN.
Mayıs 31st, 2010 on 07:28
Takvimi Türçe formatına çevirmek için kodun ilgili for döngüsünü
for ($i=1; $i<($maxgun+$ilkgun); $i++) {
if(($i % 7) == 1 ) echo "\n”;
if($i < $ilkgun) echo "\n”;
else echo “”. ($i – $ilkgun + 1) . “\n”;
if(($i % 7) == 0 ) echo “\n”;
}
şeklinde düzenlerseniz Günler pazatesien başlamış oluyor.
günler satırınıda şu şekilde yapmak gerekiyor
Pt
Sa
Ça
Pe
Cu
Ct
Pa
Şubat 24th, 2011 on 06:13
Bu takvimde şuan hangi tarihte olsugumunu nasıl gösterttire biliriz acaba ayın kaçı oldugu nu göstermiyor
Eylül 19th, 2011 on 03:33
evet hangi günde olduğunu göstermek için ne yazmamız gerekiyor
Aralık 12th, 2011 on 05:15
türkçe takvimin eksizsiz çalışır hali. önceki yorumda eğer ayın 1. günü pazar ise sorun çıkartıyordu. uğraştım düzelttim.
<?php
$zaman = mktime(0,0,0,$ay,1,$yil);
$maxgun = date("t",$zaman);
$buay = getdate ($zaman);
echo $ilkgun = $buay['wday'];
if ($ilkgun == 0) $ilkgun = 7;
for ($i=1; $i<($maxgun+$ilkgun); $i++) {
if(($i % 7) == 1) echo '’;
if($i < $ilkgun) echo '’;
else echo ”.($i – $ilkgun + 1).”;
if(($i % 7) == 0 ) echo ”;
}
?>