2010-10-03 45 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