>백엔드 개발 >PHP 튜토리얼 >PHP로 간단한 달력을 만드는 방법에 대한 자세한 설명(코드 포함)

PHP로 간단한 달력을 만드는 방법에 대한 자세한 설명(코드 포함)

藏色散人
藏色散人앞으로
2023-03-23 16:52:353670검색

이 기사는 PHP를 사용하여 간단한 달력을 만드는 방법을 주로 소개합니다. 관심 있는 친구들은 아래를 살펴보는 것이 모든 사람에게 도움이 되기를 바랍니다.

설명 예시

날짜와 시간 처리에 대해 말하자면, 캘린더 프로그램 작성에 대해 소개해야겠습니다. 하지만 달력을 작성할 때 대부분의 독자들은 달력의 역할이 현재 날짜를 페이지에 표시하는 역할만 한다고 생각할 것입니다. 사실 우리의 개발에서는 달력이 더 중요한 역할을 합니다. 예를 들어, "메모장"을 개발할 때 달력을 통해 날짜를 설정해야 하며 일부 시스템에서는 작업을 날짜별로 정렬해야 하고 달력도 필요합니다.

구현 과정

캘린더 클래스 Calendar를 Calendar.class.php 파일에 선언합니다. 코드는 다음과 같습니다.

<?php
/*
	calendar.class.php日历类
	声明一个日历类,名称为Calendar,用来显示可以设置日期的日历
 */
class Calendar{
	private $year;//当前的年
	private $month;//当前的月
	private $start_weekday;//当月的第一天对应的是周几,作为当月遍历日期的开始
	private $days;//当前月的总天数

	/**
	 * 构造方法,初始化一些属性
	 */
	function __construct(){ 
		//如果用户没有设置年份数,则使用当前系统时间的年份
		$this->year = isset($_GET["year"]) ? $_GET["year"] :date("Y") ;
		//如果用户没有设置月份数,则使用当前系统时间的月份
		$this->month = isset($_GET["month"]) ? $_GET["month"] :date("m") ;
		//通过具体的年份和月份,利用date() 函数的w参数获取当月第一天对应的是周几
		$this->start_weekday = date("w",mktime(0, 0, 0, $this->month, 1, $this->year));
		//通过具体的年份和月份,利用date()函数的参数获取当月的天数
		$this->days = date("t",mktime(0, 0, 0, $this->month, 1, $this->year));
	}
	/**
	 * 打印整个日历
	 * @return string 日历字符串
	 */
	function __toString(){
		$out .= &#39;<table align="center">&#39;; //日历以表格形式打印
		$out .= $this->changeDate(); //用户设置日期
		$out .= $this->weeksList(); //打印·周·列表
		$out .= $this->daysList(); //打印·日·列表
		$out .= &#39;</table>&#39;; //表格结束
		return $out; //返回整个日历,输出需要的全部字符串 
	}
	/**
	 * 输出周列表
	 * @return string 周列表字符串
	 */
	private function weeksList(){
		$week = array (&#39;日&#39;,&#39;一&#39;,&#39;二&#39;,&#39;三&#39;,&#39;四&#39;,&#39;五&#39;,&#39;六&#39;);
		$out .= &#39;<tr>&#39;;
		for($i = 0; $i < count($week); $i++){
			$out .= &#39;<th class="fontb">&#39; . $week [$i]. &#39;</th>&#39;;
		}
		$out .= &#39;</tr>&#39;;
		return $out; // 返回周列表字符串
	}
	/**
	 * 输出日列表
	 * @return string 日历表字符串
	 */
	private function daysList(){
		$out .= &#39;<tr>&#39;;
		// 输出空格(当月第一天对应的是周几,就是几个空格)
		for($j = 0; $j < $this->start_weekday; $j++){
			$out .= &#39;<td> </td>&#39;;
		}
		// 循环输出当前月所有日期
		for($k = 1; $k <= $this->days; $k++){
			$j++;
			if($k == date(&#39;d&#39;)){// 若为当前日期,设置为深色背景
				$out .= &#39;<td class="fontb">&#39;.$k.&#39;</td>&#39;;
			} else {
				$out .= &#39;<td>&#39;.$k.&#39;</td>&#39;;
			}
			if($j%7 == 0){//每输出7个日期,就换一行
				$out .= &#39;</tr><tr>&#39;;//输出行结束和下一行开始
			}
		}
		while ($j%7 != 0) {//遍历完日期后,剩下的用空格补全
			$out .= &#39;<td> </td>&#39;;
			$j++;
		}
		$out .= &#39;</tr>&#39;;
		return $out; //返回当月日列表
	}
	/**
	 * 用于处理当前年份的上一年需要的数据
	 * @param  int $year  当前年份
	 * @param  int $month 当前月份
	 * @return string   最终的年份和月份设置参数
	 */
	private function prevYear($year, $month){ 
		$year = $year-1; //上一年是当前年减1
		if ($year < 1970){ //如果设至的年份小于1970年
			$year = 1970; //年份设置最小值是1970年
		}
		//返回最终的年份和月份设置参数
		return "year={$year}&month={$month}";
	}
	/**
	 * 用于处理当前月份的上一月份的数据
	 * @param  int $year  当前年份
	 * @param  int $month 当前月份
	 * @return string   最终的年份和月份设置参数
	 */
	private function prevMonth($year, $month){
		if($month== 1){
			$year = $year -1;
			if($year < 1970){ // 最小年份数不能小于1970年
				$year = 1970;
			}
			//如果月是1月,上一月就是上一年的最后一月
			$month = 12;
		} else {
			$month--; //上一月就是当前月减1
		}
		// 返回最终的年份和月份设置参数
		return "year={$year}&month={$month}";
	}
	/**
	 * 用于处理当前年份的下一年份的数据
	 * @param  int $year  当前年份
	 * @param  int $month 当前月份
	 * @return string   最终的年份和月份设置参数
	 */
	private function nextYear($year, $month){
		$year = $year+1; // 下一年是当前年加1
		if ($year> 2038){ //如果设量的年份大于2038年
			$year=2038; //最大年份不能超过2038年
		}
		//返回最终的年份和月份设置参数
		return "year={$year}&month={$month}";
	}
	/**
	 * 用于处理当前月份的下一个月份的数据
	 * @param  int $year  当前年份
	 * @param  int $month 当前月份
	 * @return string   最终的年份和月份设置参数
	 */
	private function nextMonth($year, $month){
		if($month == 12){//如果已经是当年的最后一个月
			$year++;//下一个月就是下一年的第一个月,让年份加1
			if($year> 2038){ //如果设豆的年份大于2038年
				$year = 2038; //最大年份不能超过2038年
			}
			$month = 1; //设置月份为下一年的第一个月
		} else {
			$month++;//其他月份的下一个月都是当前月份加1即可
		}
		//返回最终的年份和月份设置参数
		return "year={$year}&month={$month}";
	}
	/**
	 * 调整日期
	 * @param  string $url 页面路径
	 * @return string 页面字符串
	 */
	private function changeDate($url=&#39;index.php&#39;){
		$out .= &#39;<tr>&#39;;
		//上一年
		$out .= &#39;<td><a href="&#39;.$url.&#39;?&#39;.$this->prevYear($this->year,$this->month).&#39;">&#39;.&#39;<<&#39;.&#39;</a></td>&#39;;
		//上个月
		$out .= &#39;<td><a href="&#39;.$url.&#39;?&#39;.$this->prevMonth($this->year,$this->month).&#39;">&#39;.&#39;<&#39;.&#39;</a> </td>&#39;;
		$out .= &#39;<td colspan="3">&#39;;
		$out .= &#39;<form>&#39;;
		//年份选择框
		$out .= &#39;<select name="year" οnchange="window.location=\&#39;&#39;. $url.&#39;?year=\&#39;+this.options[selectedIndex].value+\&#39;&month=&#39;. $this->month. &#39;\&#39;">&#39;;
		//循环输出年份
		for($sy=1970; $sy <= 2038; $sy++){
			$selected = ($sy==$this->year) ? "selected" : "";
			$out .= &#39;<option &#39;. $selected. &#39; value="&#39;. $sy. &#39;">&#39;. $sy. &#39;</option>&#39;;
		}
		$out .= &#39;</select>&#39;;
		//月份选择框
		$out .= &#39;<select name="month" οnchange="window.location=\&#39;&#39;. $url. &#39;?year=&#39;. $this->year. &#39;&month=\&#39;+this.options[selectedIndex].value">&#39;;
		//循环输出月份
		for ($sm=1; $sm <=12; $sm++){
			$selected1 = ($sm==$this->month) ? "selected" : "";
			$out .=&#39;<option &#39;. $selected1. &#39; value="&#39;. Ssm. &#39;">&#39;. $sm. &#39;</option>&#39;;
		}
		$out .= &#39;</select>&#39;;
		$out .= &#39;</form>&#39;;
		$out .= &#39;</td>&#39;;
		//下一年
		$out .= &#39;<td> <a href="&#39;.$url.&#39;?&#39;.$this->nextMonth($this->year,$this->month).&#39;">&#39;.&#39;>&#39;.&#39;</a></td>&#39;;
		//下个月
		$out .= &#39;<td> <a href="&#39;.$url.&#39;?&#39;.$this->nextYear($this->year,$this->month).&#39;">&#39;.&#39;>>&#39;.&#39;</a></td>&#39;;
		$out .= &#39;</tr>&#39;;
		return $out; //返回调整日期的表单
	}
}

이 예는 캘린더 프로그램을 기능별로 분할합니다(주 목록 부분, 날짜 목록 부분, 날짜 부분 설정, 전년도, 다음 해, 이전 달, 다음 달 설정 부분)을 달력 클래스에 캡슐화합니다. 달력 클래스를 사용하면 달력을 로드하고 출력하는 기본 프로그램도 작성해야 합니다. 메인 프로그램에서 먼저 달력 출력 스타일을 설정해야 합니다.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>日历示例</title>
<style>
table{ border: 1px solid #050; }
.fontb{ color:white;background:blue; }
th { width: 30px; }
td,th { height: 30px;text-align:center; }
form { margin: 0px;padding: 0px; }
</style>
</head>
<body>
<?php
require &#39;calendar.class.php&#39;;
echo new Calendar;
?>
</body>
</html>

효과 표시

실행 효과는 다음과 같습니다.
PHP로 간단한 달력을 만드는 방법에 대한 자세한 설명(코드 포함)

추천 학습: " PHP 비디오 튜토리얼

위 내용은 PHP로 간단한 달력을 만드는 방법에 대한 자세한 설명(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제