2010-10-03 73 views
0

這是我從在線教程獲得的日曆腳本。它工作正常,但我想週日的列移動到結束(星期六列後):PHP日曆:將星期天的列移動到末尾

<?php 
if (!isset($_REQUEST["month"])) $_REQUEST["month"] = date("n"); 
if (!isset($_REQUEST["year"])) $_REQUEST["year"] = date("Y"); 

$month_current = $_REQUEST["month"]; 
$year_current = $_REQUEST["year"]; 

$prev_year = $year_current; 
$next_year = $year_current; 

$month_previous = $month_current-1; 
$month_next = $month_current+1; 

if ($month_previous == 0) 
{ 
$month_previous = 12; 
$prev_year = $year_current - 1; 
} 

if ($month_next == 13) 
{ 
$month_next = 1; 
$next_year = $year_current + 1; 
} 

$timestamp = mktime(0,0,0,$month_current,1,$year_current); 
$lastdate = date("t",$timestamp); 

$thismonth = getdate ($timestamp); 
$firstday = $thismonth['wday']; 
?> 

<?php 
for ($i=0; $i<($lastdate + $firstday); $i++) 
{ 

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

if($i < $firstday) echo "<td></td>\n"; 

else echo "<td align='center' valign='middle' height='20px'>". ($i - $firstday + 1) . "</td>\n"; 

if(($i % 7) == 6) echo "</tr>\n"; 

} 
?> 

我試圖改變代碼到這一點:

<?php 
for ($i=0; $i<($lastdate + $firstday); $i++) 
{ 

if(($i % 7) == 1) echo "<tr>\n"; 

# if $i less than the first day (1), don't print the value of $i 
if($i < $firstday) echo "<td></td>\n"; 

# print the value of $i 
else echo "<td align='center' valign='middle' height='20px'>". ($i - $firstday + 1) . "</td>\n"; 

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

} 
?> 

然後,它不當第一天從星期天開始時,在列中正確顯示。例如:http://ec-ener.eu/dump/index.php?month=8&year=2010

我該如何解決?或者,如何更改原始腳本以便我可以將星期天移動到列的末尾?

p.s.我也剛剛發現,原來的代碼似乎有一點問題/錯誤,如果你檢查HTML - TR和TD - 它產生,

<tr> 
<td align='center' valign='middle' height='20px'>30</td> 
<td align='center' valign='middle' height='20px'>31</td> 


           </table> 
      </td> 
     </tr> 

它在閉幕表,只有一個關閉但沒有開放。我相信原來的單一簡單循環會生成一些無效的html!我可以修復它嗎?謝謝!

回答

2

我認爲你需要改變firstday變量值第1天

$firstday = $thismonth['wday']; //from here 
//adding 
$firstday = ($firstday + 6) % 7; //shifting the 1st day 
+0

感謝。它適用於這一行+原始腳本! :-) – laukok 2010-10-03 02:04:16

+0

大聲笑我會的!順便說一句,實際上原來的簡單單循環是誤導 - 它會產生無效的HTML!你會知道我的意思,如果你閱讀我上面發佈的編輯問題。謝謝! – laukok 2010-10-03 03:35:55

0

有兩個問題在修改後的腳本:

環路自$ I = 0開始,但不產生一個<tr>標籤,直到$ i = 1。所以第一列沒有任何<tr>標籤。

此外,if($i < $firstday)需要六次才能生成六個空的<td></td>標籤以將日期移動到右側列。

爲了解決這個問題,從1開始循環,並在星期日是第一天,這麼多集$firstday = 7

<?php 
if($firstday == 0) $firstday = 7; 
for ($i=1; $i<($lastdate + $firstday); $i++) 
{ 

    if(($i % 7) == 1) echo "<tr>\n"; 

    # if $i less than the first day (1), don't print the value of $i 
    if($i < $firstday) echo "<td></td>\n"; 

    # print the value of $i 
    else echo "<td align='center' valign='middle' height='20px'>". ($i - $firstday + 1) . "</td>\n"; 

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

} 
?> 
+0

非常感謝。我喜歡這個解決方案,因爲它對我更有意義bcos我不太瞭解%(模量分割)如何工作!順便說一下,結束,如果應該是 - 如果(($ i%7)== 0)回聲「 \ n」;否則,它顯示奇怪...謝謝! – laukok 2010-10-03 02:15:36

+0

你說得對,我在打印一列後關閉了標籤。哎呀。 (我會在我的代碼中解決這個問題,以防將來有人讀到這個) – 2010-10-03 03:22:42

+0

沒問題,實際上最初的簡單單循環是誤導性的 - 它會生成無效的html! – laukok 2010-10-03 03:34:14