用PHP写一个-万年日历表

首先,给大家展示一下效果图。

 功能包括:年份和月份查询,上一年、下一年、上一月、下一月和回到今天这几个功能。

项目文件

 项目代码

1.php

<?php 
	echo "<pre>";

	//设置时区
	//date_default_timezone_set('America/New_York');

	//1.获取时间戳
	var_dump(time());
	
	//2.格式化时间戳
	var_dump(date('Y-m-d H:i:s',time()));
	
	//3.将一个指定的日期时间转换为时间戳
	//var_dump(mktime('时','分','秒','月','日','年'));
	var_dump(mktime('10','30','59','12','30','2001'));
	
	//4.将一个字符串格式的日期,转换为时间戳
	var_dump(date('Y-m-d H:i:s',strtotime("+1day")));	//明天的现在这个时候
	var_dump(date('Y-m-d H:i:s',strtotime("-1day")));	//昨天的现在这个时候
	var_dump(date('Y-m-d H:i:s',strtotime("-1week")));	//上周的现在这个时候
	var_dump(date('Y-m-d H:i:s',strtotime("-1month")));	//上个月的现在这个时候
	var_dump(date('Y-m-d H:i:s',strtotime("-1year")));	//上个月的现在这个时候
	var_dump(date('Y-m-d H:i:s',strtotime("-1year +1month +2week +2day")));	//上个月的现在这个时候
?>

calendar_new.php

<!DOCTYPE html>
<html>
	<head>
		<title>万年历</title>
		<meta charset="utf-8"/>
	</head>
	<body>
		<?php 
			//获取用户查询的年份和月份
			$year = isset($_GET['year'])==true ? $_GET['year'] : date('Y');
			$month = isset($_GET['month'])==true ? $_GET['month'] : date('m');
			
			//只对$_GET有效
			// $year = $_GET['year'] ?? date('Y');
			// $month = $_GET['month'] ?? date('m');
			
			$new_year = date('Y',time());
			// echo $new_year;
			$new_month = date('m',time());
			// echo $new_month;
			$new_days = date('d',time());
		
			//获取当前月第一天的时间戳
			$time = mktime(0,0,0,$month,1,$year);
		
			//1.首先,获取万年历前方的空格
			$first = date('N',$time)-1;	//0
			
			//2.然后,获得当前月的天数
			$days = date('t',$time);	//30
			
			//3.最后,求得万年历后方的空格
			$last = 42-$first-$days	//12
		?>
		<center>
			<h2>万年历</h2>
			<h3><?= $year ?> 年 <?= $month ?> 月</h3>
			<form action="./calendar_new.php" method="get">
				年份:<select name='year'>
					<?php 
						for($y=1970; $y<=2100; $y++){
							if($y==$year){
								echo "<option selected value='{$y}'>{$y} 年</option>";
							}else{
								echo "<option value='{$y}'>{$y} 年</option>";
							}
						}
					?>
					  </select>
				月份:<select name='month'>
					<?php 
						for($m=1; $m<=12; $m++){
							if($m==$month){
					?>
								<option selected value="<?= $m ?>"><?= $m ?> 月</option>
					<?php
							}else{
					?>
								<option value="<?= $m ?>"><?= $m ?> 月</option>
					<?php 
							}
						}
					?>
					  </select>
					  <input type="submit" value="查询"/>
			</form>
			<br/>
			<table border='1' width='800' cellspacing='0' cellpadding='5'>
				<tr>
					<th>一</th>
					<th>二</th>
					<th>三</th>
					<th>四</th>
					<th>五</th>
					<th>六</th>
					<th>日</th>
				</tr>
				<tr align='center'>
			<?php 
				//定义一个统计单元格个数的空变量
				$num = 0;
				$new_days = date('d',time());
			
				//1.循环表格中前方的空格
				for($i=1; $i<=$first; $i++){
					echo "<td>&nbsp;</td>";
					++$num;
					
					//判断单元格是否到达7的倍数
					if($num%7==0){
						echo "</tr><tr align='center'>";
					}
				}
				
				//2.循环表格中中间的日期
				for($j=1; $j<=$days; $j++){
					// echo $year;
					// echo $month;
					if(($j==$new_days) && ($year==$new_year) && ($month==$new_month) ){

						echo "<td><font color=red>{$j}</font></td>";
						++$num;
						
					}else{
					echo "<td>{$j}</td>";
					++$num;
				}
					//判断单元格是否到达7的倍数
					if($num%7==0){
						echo "</tr><tr align='center'>";
					}
					
				}
				
				//3.循环表格最后的空格
				for($k=1; $k<=$last; $k++){
					echo "<td>&nbsp;</td>";
					++$num;
					
					//判断单元格是否到达7的倍数
					if($num%7==0){
						echo "</tr><tr align='center'>";
					}
				}
				
			?>
				</tr>
			</table>
			<br/>
			<a href="./calendar_new.php?year=<?= $year-1 ?>&month=<?= $month ?>">上一年</a>
			<a href="./calendar_new.php?year=<?= $prevy ?>&month=<?= $prevm ?>">上一月</a>
			<a href="./calendar_new.php">回到今天</a>
			<a href="./calendar_new.php?year=<?= $nexty ?>&month=<?= $nextm ?>">下一月</a>
			<a href="./calendar_new.php?year=<?= $year+1 ?>&month=<?= $month ?>">下一年</a>
		</center>
	</body>
</html>

大家可以直接复制代码,放到对应的文件名里就可以运行。适合初学php的人学习使用。

用C语言一个万年历程序需要考虑日期的计算,包括闰年的判断、每个月的天数、星期的计算等。以下是一个简单的示例代码框架,它展示了如何创建一个基本的万年历程序: ```c #include <stdio.h> // 判断是否是闰年 int isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } // 获取某年某月的天数 int getDaysOfMonth(int year, int month) { int daysOfMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if (month == 2 && isLeapYear(year)) { return 29; } return daysOfMonth[month - 1]; } // 计算某年某月某日是星期几(基姆拉尔森计算公式) int getDayOfWeek(int year, int month, int day) { if (month == 1 || month == 2) { month += 12; year--; } int week = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7; return week; } // 打印万年历 void printCalendar(int year, int month) { printf(" %d年 %d月\n", year, month); printf("日 一 二 三 四 五 六\n"); int days = getDaysOfMonth(year, month); int week = getDayOfWeek(year, month, 1); // 打印空白 for (int i = 0; i < week; i++) { printf(" "); } // 打印日期 for (int day = 1; day <= days; day++) { printf("%2d ", day); if ((day + week) % 7 == 0) { printf("\n"); } } printf("\n"); } int main() { int year, month; printf("请输入年份和月份(例如:2023 4):"); scanf("%d %d", &year, &month); printCalendar(year, month); return 0; } ``` 这段代码提供了一个简单的万年历,用户输入年份和月份后,程序会打印出对应的日历。需要注意的是,这里使用了基姆拉尔森计算公式来计算星期几,这种方法在计算上是准确的,但具体实现可能因公式细节有所差异。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

保持微笑-泽

谢谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值