我有一个PHP日历,列出了表中每月的所有日期。在每个月的第一天之前,我有上个月的数字,并且在该月的最后一天之后是下个月的天数。
这是目前看起来的日历照片。你可以看到底部的灰色数字工作正常,但是这个月的第一天之前的数字是负数,而应该显示为'29,30'
例如,该月最后一天之后的数字仅为'32,33,34',因此我只创建了一个if语句,用于检查该数字是否大于当前月份的总天数以及是否所以,然后从'32'中减去一个月中的总天数,这样就会使它显示为'1,2,3'。
if ($day > $total_days_of_current_month) {
echo '<td>' . ($day - $total_days_of_current_month) . ' </td>'; // for example,33-31=2
}
我的问题是创建一个if语句,以某种方式知道上个月的最后几天是什么。问题是,有些月份有30天,有些月份有31天。此外,2月和闰年也是一个问题。有没有人知道if语句所以我可以让它显示为上个月的'28,29,30'?
答案 0 :(得分:1)
答案 1 :(得分:0)
为什么不采取该月第一天的时间戳,并从中减去24小时,然后使用date('d', $timestamp);
?此外,如果您在该月有时间戳,date('t', $timestamp);
将获得该月的天数。
一个简单的例子:
// sets to 3am, first day of month, 3am helps us avoid DST issues with subtracting hours
$monthStart = mktime(3,0,0,date('n'),1,date('Y'));
$thisMonth = date('n', $monthStart);
// rewind to the sunday before- date('w') is the "weekday" 0 based
$date = $monthStart - (date('w',$monthStart) * 60 * 60 * 24);
while ($date<$monthStart || date('n', $date) == $thisMonth)
{
echo "<tr>";
for ($x=0; $x<7; $x++) {
echo "<td";
if (date('n', $date) != $thisMonth) echo " class='notMonth'";
echo ">";
echo date("j", $date);
echo "</td>";
$date += 60*60*24;
}
echo "</tr>\n";
}
答案 2 :(得分:0)
假设$day
是UNIX时间戳:
// gets you the first of the month
$date = getdate(mktime(0, 0, 0, date('n', $day), 1, date('Y', $day)));
从这里,做其中一个:
$lastDayOfPrevMonth = strtotime('-1 day', $date[0]);
// or, better, get the first day "in the grid" (assuming week starts on Sunday)
$date = strtotime("-$date[wday] days", $date[0]);
我不想竖起来,但你看了我的previous answer吗?这是一种更健壮的方式来构建日历而不是所有这些特殊情况检查。
答案 3 :(得分:0)
看一下PHP-Calendar-Class项目的来源:
http://code.google.com/p/php-calendar-class/
课程来源:http://code.google.com/p/php-calendar-class/source/browse/trunk/calendar.class.php
它可能会让您对这个问题有所了解。
答案 4 :(得分:0)
使用cal_days_in_month(),如何添加以下代码:
if ($day < 1) {
echo '<td>' . ($day + cal_days_in_month(
CAL_GREGORIAN,date_format("n",
date_add(date_create(),"P-1M")))) . ' </td>'; // for example,-1 + 30 = 29th
}
已编辑:添加了date_format函数
答案 5 :(得分:0)
等一下......你的月份名称在顶部是错误的!它说“2009年8月”,但是这个月有30天,工作日也适合2009年9月!
在担心其他月份之前,您需要先修复当前月份。