我有这个简单的PHP日历模板(从星期一而不是星期日开始,因为我是意大利人)
<?php
$date = strtotime("2011-05-19");
$monthNames = Array("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre");
$cMonth = date("n", $date);
$cYear = date("Y", $date);
?>
<table border="1" cellpadding="4" cellspacing="0">
<caption>
<?php echo $monthNames[$cMonth-1].' '.$cYear; ?>
</caption>
<tr>
<th>l</th>
<th>m</th>
<th>m</th>
<th>g</th>
<th>v</th>
<th>s</th>
<th>d</th>
</tr>
<?php
$timestamp = mktime(0,0,0,$cMonth,1,$cYear);
$maxday = date("t",$timestamp);
$thismonth = getdate($timestamp);
$startday = $thismonth['wday']-1;
for ($i=0; $i<($maxday+$startday); $i++) {
if(($i % 7) == 0 ) { ?>
<tr>
<?php } ?>
<?php if($i < $startday) { ?>
<td> </td>
<?php } else { ?>
<td align='center' valign='middle' height='20px'><?php echo ($i - $startday + 1); ?></td>
<?php } ?>
<?php if(($i % 7) == 6 ) { ?>
</tr>
<?php } ?>
<?php }
?>
</table>
尽管这是“意大利面条代码”,但它很简单......几乎正在工作 我只有两个问题(请更改$ date值并查看自己):
请帮忙吗? 非常感谢提前
答案 0 :(得分:1)
就个人而言,为了不重新发明轮子,我会使用本地化的日历插件,例如jQuery UI Datepicker。然后用意大利语显示日历就像这样简单:
$("#calendarDiv").datepicker($.datepicker.regional["it"]);
$("#calendarDiv").datepicker("setDate", "19/05/2011");
此日历(本地化为意大利语)在星期一(Lunedi)开始星期几,并将默认日期格式更改为更健全的国家/地区共同的预期日/月/年。
现在,认识到使用外部插件并不总是一个可行的选项,你可以扩展PHP来渲染你的日历(这个块会出现在你当前用于周名称的标题行之后):
$timestamp = mktime(0,0,0,$cMonth,0,$cYear);
$maxday = date("t",$timestamp);
$thismonth = getdate($timestamp);
$startday = $thismonth['wday'];
for ($i = 0; $i <= ($maxday + $startday); $i++)
{
if(($i % 7) == 0 )
echo "<tr>";
if($i < $startday)
echo "<td> </td>";
else
echo "<td align='center' valign='middle' height='20px'>" .
($i - $startday + 1) . "</td>";
if(($i == ($maxday + $startday)) && (($i % 7) > 0))
{
$spareDays = (7 - ($i % 7)) - 1;
for($i = 0; $i < $spareDays; $i++)
echo "<td> </td>";
echo "</tr>";
break;
}
else if(($i % 7) == 6 )
echo "</tr>";
}
我已经对您的示例进行了一些调整以更正开始日和结束日,以使日历视图看起来与jQuery UI Datepicker呈现的视图相同,但取决于您的PHP实例在服务器上的本地化方式,他们可能需要调整回来(参见dmikester1的答案)。我的实现是相当基本的,但我希望它在语义上与原始示例保持相似。
答案 1 :(得分:0)
通过删除-1更改此行似乎可以解决问题#2:
$startday = $thismonth['wday']-1;
好的,#1的修复无效。