函数名称:calendar 两个参数:year及month 返回多行字符串示例: 注意行号不属于字符串的内容。 2022 年 10 月 一 二 三 四 五 六 日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
时间: 2024-01-01 09:04:39 浏览: 128
一个实用的日历函数
好的,以下是根据年份和月份生成日历的 PHP 函数 `calendar` 的代码:
```php
function calendar(int $year, int $month): string {
$monthName = date("F", mktime(0, 0, 0, $month, 1, $year)); // 获取月份的英文名
$daysInMonth = date("t", mktime(0, 0, 0, $month, 1, $year)); // 获取月份的天数
$firstDayOfMonth = date("N", mktime(0, 0, 0, $month, 1, $year)); // 获取月份第一天是星期几
$calendar = "$year 年 $monthName\n一 二 三 四 五 六 日\n"; // 初始化日历字符串
$dayOfMonth = 1; // 从第一天开始
for ($i = 1; $i <= 6; $i++) { // 最多需要 6 行
for ($j = 1; $j <= 7; $j++) { // 每行 7 天
if ($i == 1 && $j < $firstDayOfMonth) {
// 如果是第一行且当前日期还没到第一个星期一,填充空格
$calendar .= " ";
} else {
// 否则填充日期
$calendar .= str_pad($dayOfMonth, 2, " ", STR_PAD_LEFT) . " ";
$dayOfMonth++;
if ($dayOfMonth > $daysInMonth) {
// 如果日期已经超过了当月天数,结束循环
break 2;
}
}
}
// 每填充完一行,换行
$calendar .= "\n";
}
return $calendar; // 返回日历字符串
}
```
在这个函数中,我们使用了 PHP 内置函数 `date()` 和 `mktime()` 来获取月份的英文名、天数和第一天是星期几。然后,我们使用一个双重循环来填充日历字符串。外层循环控制行数,内层循环控制每行的日期。如果当前日期还没到第一个星期一,我们填充空格,否则填充日期。如果日期已经超过了当月天数,我们结束循环。
最后,我们将日历字符串作为函数的返回值。
你可以这样调用函数来生成日历:
```php
echo calendar(year: 2022, month: 10);
```
这里我们使用了 PHP 8 中引入的命名参数语法,将参数名与参数值一一对应地传递给函数。函数将生成一个日历字符串并返回,我们使用 `echo` 将其输出到屏幕上。
阅读全文