<?php
function build_calendar($month,$year,$dateArray) {
// Create array containing abbreviations of days of week.
$daysOfWeek = array('S','M','T','W','T','F','S');
// What is the first day of the month in question?
$firstDayOfMonth = mktime(0,0,0,$month,1,$year);
// How many days does this month contain?
$numberDays = date('t',$firstDayOfMonth);
// Retrieve some information about the first day of the
// month in question.
$dateComponents = getdate($firstDayOfMonth);
// What is the name of the month in question?
$monthName = $dateComponents['month'];
// What is the index value (0-6) of the first day of the
// month in question.
$dayOfWeek = $dateComponents['wday'];
// Create the table tag opener and day headers
$calendar = "<table class='calendar'>";
$calendar .= "<caption>$monthName $year</caption>";
$calendar .= "<tr>";
// Create the calendar headers
foreach($daysOfWeek as $day) {
$calendar .= "<th class='header'>$day</th>";
}
// Create the rest of the calendar
// Initiate the day counter, starting with the 1st.
$currentDay = 1;
$calendar .= "</tr><tr>";
// The variable $dayOfWeek is used to
// ensure that the calendar
// display consists of exactly 7 columns.
if ($dayOfWeek > 0) {
$calendar .= "<td colspan='$dayOfWeek'> </td>";
}
$month = str_pad($month, 2, "0", STR_PAD_LEFT);
while ($currentDay <= $numberDays) {
// Seventh column (Saturday) reached. Start a new row.
if ($dayOfWeek == 7) {
$dayOfWeek = 0;
$calendar .= "</tr><tr>";
}
$currentDayRel = str_pad($currentDay, 2, "0", STR_PAD_LEFT);
$date = "$year-$month-$currentDayRel";
$calendar .= "<td class='day' rel='$date'>$currentDay</td>";
// Increment counters
$currentDay++;
$dayOfWeek++;
}
// Complete the row of the last week in month, if necessary
if ($dayOfWeek != 7) {
$remainingDays = 7 - $dayOfWeek;
$calendar .= "<td colspan='$remainingDays'> </td>";
}
$calendar .= "</tr>";
$calendar .= "</table>";
return $calendar;
}
?>
用法
构建本月的日历
<?php
$dateComponents = getdate();
$month = $dateComponents['mon'];
$year = $dateComponents['year'];
echo build_calendar($month,$year,$dateArray);
?>
我该如何修改它以突出显示当前日期?
在脚本顶部添加这两个变量
然后将日期循环更改为以下内容
在你的 CSS 中使用 id=’today_date’ 来更改日期的外观….
希望这有帮助…
– 杰森
这些函数也可以使用。第一个创建特定月份/年份的日历,第二个创建从特定月份/年份开始的全年日历。
// 针对特定月份和年份
$month = "3"; // 月份编号 (1-12)
$year = "2010"; // 四位数
echo build_calendar($month,$year,$dateArray);
// 针对特定年份的所有月份
$year = "2010";
$i = 1;
$month=1; // 数字值
while($i <'s= 12){
echo build_calendar($month,$year,$dateArray);
$month=$month+1;
$i++;}
第二个代码应该改为
// 针对特定年份的所有月份
$year = "2010";
$i = 1;
$month=1; // 数字值
while($i <'s= 12){
echo build_calendar($month,$year,$dateArray);
$month=$month+1;
$i++;}
这真的很棒。谢谢。
然而,我仍然无法让整年都工作。
有什么想法吗?
while($i <= 12){
而不是 while($i <'s= 12){
你能发布有关如何在日历中显示事件(本地数据库)以及如何使用日历控件(如选择月份、年份以及下一个和上一个月份)的信息吗?谢谢
扎卡里 ([email protected])
只需根据事件的日期查询数据库… 将字符串分解,以便你只获取一位数的日期格式。然后在日期打印循环(参见我上面的代码)中,检查查询的日期是否等于 $currentDay。如果是,则打印事件数据。它将使用新日期在每次重新查询。
示例
将代码放在 while ($currentDay <= $numberDays) { } 循环中…
仔细检查我的请求查询循环,但它应该可以工作…
它真的是一个很好的脚本和实现思路。很棒!开发人员可以使用/自定义它来满足他们的需求。;
问题是,第三个参数 $dateArray 是什么?在我看来,函数中没有对该参数的引用。
很棒的工具。我希望有一种方法可以更改月份,但这需要使用 Ajax 或 iframe。
更改
类似于以下内容(在日期旁边显示日期信息)
或者这样(链接到特定日期的页面)
并在其他地方构建数组。在我的名字链接到的页面上查看输出(我仍然需要清理一些格式)。
同样… 第三个参数 $dateArray 是什么?我因此遇到了未定义变量错误。从代码中删除了对它的所有引用,并且日历在没有错误的情况下正常显示。
你好
我正在学习如何在网络博客上放置日历,并且看到了这个帖子。你能告诉我日历的完整脚本等信息吗?…..
提前感谢
艾琳
为了让一周从周一开始,我做了一个小小的改变
同样只需更改
$daysOfWeek
数组即可。希望它能起作用 :)
太棒了!正是我想要的 :D
简短版本
$dayOfWeek = ($dateComponents[‘wday’] + 6) % 7;
太棒了,喜欢它。
感谢您提供了一段很棒的代码,以及那些留下反馈意见的人,他们的可选更改确实提高了日历的功能。
嗨,我是一名高中生(新手),我在 FuelPHP 中实现了这个,但有一些错误,
<?php
class Controller_Calendar extends Controller_Timetable{
public function before(){
parent::before();
}
public function build_calendar($month,$year) {
// 创建包含星期几缩写的数组。
$daysOfWeek = array('S','M','T','W','T','F','S');
// 所查询月份的第一个日期是哪一天?
$firstDayOfMonth = mktime(0,0,0,$month,1,$year);
// 这个月有多少天?
$numberDays = date('t',$firstDayOfMonth);
// 获取有关所查询月份的第一个日期的一些信息。
//
$dateComponents = getdate($firstDayOfMonth);
// 所查询月份的名称是什么?
$monthName = $dateComponents['month'];
// 所查询月份的第一个日期的索引值 (0-6) 是什么?
//
$dayOfWeek = $dateComponents['wday'];
// 创建表格标签的开头和日期标题
$calendar = "";
$calendar .= "$monthName $year";
$calendar .= "";
// 创建日历标题
foreach($daysOfWeek as $day) {
$calendar .= "$day";
}
// 创建日历的其余部分
// 初始化日期计数器,从第 1 天开始。
$currentDay = 1;
$calendar .= "";
// 变量 $dayOfWeek 用于
// 确保日历
// 显示包含正好 7 列。
if ($dayOfWeek > 0) {
$calendar .= " ";
}
$month = str_pad($month, 2, "0", STR_PAD_LEFT);
while ($currentDay <= $numberDays) {
// 达到第七列(星期六)。开始新的一行。
if ($dayOfWeek == 7) {
$dayOfWeek = 0;
$calendar .= "";
}
$currentDayRel = str_pad($currentDay, 2, "0", STR_PAD_LEFT);
$date = "$year-$month-$currentDayRel";
$calendar .= "$currentDay";
// 递增计数器
$currentDay++;
$dayOfWeek++;
}
// 如果需要,完成月份最后一周的行
if ($dayOfWeek != 7) {
$remainingDays = 7 - $dayOfWeek;
$calendar .= " ";
}
$calendar .= "";
$calendar .= "";
return $calendar;
}
$dateComponents = getdate();
$i = 1;
$month=1; // 数字值
while($i
ErrorException [ 解析错误 ]: 语法错误,意外的 T_VARIABLE,期望 T_FUNCTION in $dateComponents = getdate();
你们能帮我解释一下这个问题吗?
非常好的脚本。简洁而短。谢谢
我做了一些小的更改来突出显示指定的日期
在调用主函数之前:
$dateArray = array('FEB04','MAR20');
在主函数内部:
$monthNameShort = strtoupper(substr($monthName,0,3));
在
while ($currentDay <= $numberDays)'
循环内部非常感谢。
我如何创建包含上个月和下个月的一些日期的日历?例如:http://st.rfclipart.com/image/big/c4-e1-9f/february-2013-calendar-month-Download-Royalty-free-Vector-File-EPS-13946.jpg
提前感谢!
顶。我也想知道这个。
:0)
鲈鱼
不知道你是否感兴趣,但我添加了几行代码来逐月列出日历。我在 $dateComponents 上遇到了问题。我不知道如何使用它,所以我删除了它并使用 (对我来说更简单) DATE 和 MKTIME。
如果你要使用它,把它放在代码的底部
这将使用上个月或下个月的日期填充空白。类似于 Google 日历等等
你好!很棒的脚本。如果可能的话,只是一个小问题。
如何将 $monthName 设置为数组。类似于
$monthName = array(‘January’,’February’,’March’,’April’,’May’,’June’,’July’,’August’,’September’,’October’,’November’,’December’);
提前感谢!
你好。我正在寻找同样的建议。我需要用我的语言制作月份名称,这将非常有帮助。
$monate = array(
1=>”Januar”,
2=>”Februar”,
3=>”März”,
4=>”April”,
5=>”Mai”,
6=>”Juni”,
7=>”Juli”,
8=>”August”,
9=>”September”,
10=>”Oktober”,
11=>”November”,
12=>”Dezember”
);
玩得开心 ;-)
嘿,我遇到了一个问题,现在我无法解决如何解决它。
Notice: Undefined variable: today_date in D:\Server\htdocs\Ejercicios\Pruebas\Prueba2.php on line 94
很棒的脚本,谢谢。但我正在尝试制作自定义日历而不是公历。
我必须从类似这样的数组创建日历。
date73 = {2073,32,32,31,32,31,30,30,30,29,29,30,31}
date74 = {2074,31,31,31,32,31,31,30,29,30,29,30,30}
其中第一个 date73[0] 是年份,其余的是月份的天数。请帮忙。
嗨,这很棒,谢谢!
如何将月份作为参数,以便更改日历月份?
也许将其发送到 URL 中?
非常感谢
嗨,有人可以为日历添加星期列吗?
顶!我也很想了解这个 =]
$dateArray 在做什么?!
有没有办法让当前日期始终在第二周?因此上一周在顶部,然后是当前周,然后是接下来的两周?
您需要检索早于本月的日期。我还没有尝试过这个代码段,但也许将
$currentDay
设置为负数,表示您要回溯的天数是第一步。棒极了 :) 有没有办法显示全年,但顶部显示 1 到 31,然后是侧面的月份?正在尝试构建一个考勤卡,其中学生出席的那天将放置一个点。
希望这说得通 :)
谢谢。但是如果一周从星期一开始,我需要更改什么?
只需将一周数组中的顺序更改为正确的顺序。
并更改
$dayOfWeek = $dateComponents[‘wday’];
为
$dayOfWeek = ($dateComponents[‘wday’] + 6) % 7;
在我看来,这是一个很棒的代码,
我通过添加以下代码为每一天添加了一个 URL,...... 点击每一天都会显示一个页面。
$calendar .= “<a href=’http://url.com.php?date=$date>$currentDay“;
您知道如何在同一页面上的 iframe 中显示 URL 吗?