2012-06-01 65 views
0

不起作用好這裏是我的問題 各月1日 但本月開始7 2012 2 天 開始不知道爲什麼PHP的:日曆腳本在七月

這裏是代碼

<table> 
<?php 
$cMonth = 7; 
$cYear = 2012; 

$first_day_timestamp = mktime(0,0,0,$cMonth,1,$cYear); 
$maxday    = date("t",$first_day_timestamp); 
$thismonth   = getdate($first_day_timestamp); 
$startday   = $thismonth['wday'] - 1; 

for ($i=0; $i<($maxday+$startday); $i++) { 

    if (($i % 7) == 0) echo "<tr>"; 

    if ($i < $startday) { echo "<td>&nbsp;</td>" ; continue; } 

    $current_day = $i - $startday + 1; 

    echo "<td>". $current_day . "</td>"; 

    if (($i % 7) == 6) echo "</tr>"; 
} 
?> 
</table> 

圖片附

Calendar

PLE ase告訴我爲什麼會發生這種情況

+0

你確定這沒有發生到其他月份嗎?看起來好像會。 – Tremmors

+0

是的,它發生在某些月份並不是所有monthes 你可以嘗試在你的本地主機代碼 它正常工作了許多個月 –

回答

1

你爲什麼這樣做:

$startday   = $thismonth['wday'] - 1; 

您正在將日偏移回一個。這實際上是說你想開始計算的那一天是在這個月的第一天前一天。

- EDIT-- 所以你這樣做是因爲你想讓日曆在週一而不是週日開始。 PHP的wday是this

0(星期天)到6(星期六)

你從一箇中減去它會在本月開始轉向一天下來,除非到一個月週日開始。然後$ startday是-1,它拋出你的計數。您需要將它換回前一週。如果您添加另一行修復此案例如:

$startday = thismonth['wday'] - 1; 
if($startday < 0) $startday = 6; 

它應該解決問題。我相信星期一是週一的第一天還有其他的補償方式。

+0

這是因爲日曆從星期一開始 當我刪除-1它從1開始,但不是在計算機日曆vaild天開始 –

+0

請參閱我的編輯。由於php認爲星期日是一週中的第一天,所以你必須在週六前幾個星期纔開始。 – Tremmors

+0

是的,這工作很好:)謝謝 –

2

$startday = $thismonth['wday'] - 1;更改爲$startday = $thismonth['wday'];會顯示正確的日曆,週日是一週中的第一天。

你的代碼的問題是$ startday是-1($ thismonth ['wday']是0,因爲這個月從星期天開始)。在循環的第一次迭代中,$current_day = 0 - (-1) + 1 = 2因此它從2開始,這是正確的,因爲星期一是本月的第二天。

您在任何一個星期日開始的月份都會遇到此問題。嘗試九月2013

+0

是的,它發生在2012年9月了,但是當我canged這個代碼 '$ startday指定= $ thisMonth的[」 wday'] - 1;'to'$ startday = $ thismonth ['wday']; '其他月份的這種影響 –

+0

它究竟會如何影響其他月份?它似乎爲我工作得很好。如果您想在星期一開始,如果循環內的startDay小於0,可以將startDay設置爲6(星期日)。 – sachleen