你的生日是星期几?HTML+JavaScript帮你列出来

0 源起


上周末,大宝发现今年自己的生日不是周末,这样就不好约同学和好友一起开生日Party了,很是郁闷。一直嘀咕自己哪年的生日才是周末。
于是我用JavaScript写了一个小程序来帮她测算了未来100年中每年的生日分别是星期几。

1 设计交互界面


用一个文本框来输入年份,
一个下拉列表框来选择月份,
一个下拉列表框来选择日,
一个按钮来进行测算,
一个多行文本输入框来显示测算结果。

<p>你的生日是星期几?</p>
<p>请输入生日信息</p>
<input type="text" id="txtYear" value="2024">年<select id="lsbMonth"></select>月<select id="lsbDay"></select>日
<input type="button" value="测算" id="btnCheck">
<p><textarea id="taResult" rows="15" cols="60"></textarea></p>

主打简洁,如下图:

2 输入控制

2.1 年份文本框只允输入4位整数

 当用户修改年份文本框中的内容,导致文本框的值发生改变时,会触发oninput事件,我们对这个事件进行处置,只允许输入数字,并且只保留前4位数字。

//年份输入处理
function txtYear_onInput()
{
    var a = txtYear.value.replace(/[^\d]/g,'');//只允许输入数字
    txtYear.value = a.substr(0,4);//只允许四位数字
} // txtYear_onInput()

txtYear.oninput = function() {txtYear_onInput()};

2.2 月份列表框

一年12个月,用一个函数来填充其值。

//初始化月份
function lsbMonth_Init()
{
	for (var i=1;i<13; i++)
	{
		lsbMonth.options[i-1] = new Option(i, i, true, true);    
	}
	lsbMonth.selectedIndex = 0;
}//lsbMonth_Init();

lsbMonth_Init();

2.3 日列表框

每年的1月、3月、5月、7月、8月、10月、12月是31天。

每年的14月、6月、9月、11月是30天。

2月特殊一些,平年是28天,闰年是29天。

我们先初始化日列表框为31天。

//初始化“日”下拉列表框
function lsbDay_Init()
{
	for (var i = 0;i < 31; i++)
	{
		lsbDay.options[i] = new Option(i+1,i+1,true,true);
	}
	lsbDay.selectedIndex = 0;
}//lsbDay_Init();

lsbDay_Init();

当用户修改年份时,会触发onchange事件,

当用户修改月份时,也会触发onchange事件,

我们对这两个事件进行处理:

  1. 先获取年份和月份的值,
  2. 如果用户选择的是2月,就判断用户选择的年份是平年还是闰年,平年就是28天,闰年就29天。
  3. 如果用户选择的是1月、3月、5月、7月、8月、10月或12月,那么就是31天,否则就是30天。
  4. 根据测算出来的天数调整日列表框的值。
//获取年份
function txtYear_getYear()
{
	return txtYear.value;
	//return document.getElementById("txtYear").value;
}
//alert(txtYear_getYear())

//获取月份
function lsbMonth_getMonth()
{
	return lsbMonth.options[lsbMonth.selectedIndex].value;
}

//判断是否为闰年
function isLeapYear(y)
{
	return (y % 4 == 0 && y % 100 !=0 || y % 400 == 0);
}

//根据用户输入的年份和月份,动态调整“日”下拉列表框的内容
function lsbDay_Adjust()
{
	var s = lsbDay.selectedIndex;
	//alert('typeof s='+ typeof(s)+ ' s='+s);

	var y = txtYear_getYear();
	//alert('y='+y);

	if (y <= 0)
	{
		alert("请先输入年份");
		return;
	}
	var m = lsbMonth_getMonth();
	//alert('m='+ m);
	var d;

	if (2==m)
	{
		d = isLeapYear(y) ? 29 : 28;
	}
	else
	{
		d = (m==1 || m==3 || m==5 | m==7 || m==8 || m==10 || m==12 ? 31 : 30); 
	}
	//alert('d='+d);

	lsbDay.options.length = d;
	//alert('lsbDay.options.length='+lsbDay.options.length);

	for (var i = 0;i < d; i++)
	{
		lsbDay.options[i] = new Option(i+1,i+1,true,true);
	}
	lsbDay.selectedIndex = s < d ? s : 0;
}//lsbDay_Adjust();

txtYear.oninput = function() {txtYear_onInput()};

txtYear.onchange = function() {lsbDay_Adjust()};

2.4 测算按钮

获取年月日数值,使用日期对象的getFullYear() 方法生成一个日期,然用利用日期对象的getDay() 方法返回指定日期是星期几,把结果填入测算结果。

btnCheck.onclick = function(){checkDay()};

function lsbDay_getDay()
{
	return lsbDay.options[lsbDay.selectedIndex].value;
}

function checkDay()
{
	var a = new Date();
	var y = txtYear_getYear(), m = lsbMonth_getMonth(), d = lsbDay_getDay();
	var w, s, r = '';
	for (var i=0;i < 100;i++)
	{
		a.setFullYear(y*1+i ,m-1,d);
		w = a.getDay();
		s = '';
  		//alert(a);

		r += a.getFullYear() + '年' + m + '月' + d + '日 是 星期' + "日一二三四五六".charAt(w) + '\n';
	}  //for
	taResult.value = r;
}

3 一些改进思路

1.初始化年月日时将默认值 设置系统当前日期

2.可以使用 date输入框:

 <input type="date" value="2024-06-01">

3.使用<iframe>代替<textarea>,对周日——周六分别用不同的颜色来显示。

 

4.用户界面上可以加上一个生日蛋糕之类的图片烘托氛围。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/748467.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ的Direct交换机

Direct交换机 BindingKey 在Fanout模式中&#xff0c;一条消息&#xff0c;会被所有订阅的队列都消费。但是&#xff0c;在某些场景下&#xff0c;我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。 在Direct模型下&#xff1a; 队列与交换机的绑定&a…

DDoS攻击的最新防御策略:从检测到缓解的全方位方案

在数字化浪潮的推动下&#xff0c;互联网已成为现代社会的血脉。然而&#xff0c;随着网络空间的不断膨胀&#xff0c;分布式拒绝服务&#xff08;DDoS&#xff09;攻击如同潜伏在暗处的猛兽&#xff0c;随时准备发动致命一击&#xff0c;威胁着网络的稳定与安全。面对这一严峻…

08 元组和集合

目录 一、元组&#xff08;tuple&#xff09; 1. 什么是元组 2. 查操作 3. 函数和方法 二、集合&#xff08;set&#xff09; 1. 什么是集合 2. 数学集合运算 一、元组&#xff08;tuple&#xff09; 1. 什么是元组 元组是容器型数据类型&#xff0c;将( )作为容器的标…

RabbitMQ入门基础篇

文章目录 安装 / 部署 RabbitMQ快速入门消息发送消息接收 WorkQueues模型消息发送消息接收能者多劳总结 交换机类型Fanout交换机声明队列和交换机绑定队列到交换机消息发送消息接收总结 Direct交换机声明队列和交换机为队列绑定相应的key消息接收消息发送 Topic交换机绑定队列消…

类与对象(1)

1.c升级了类 C 语言结构体中只能定义变量&#xff0c;在 C 中&#xff0c;结构体内不仅可以定义变量&#xff0c;也可以定义函数。 比如&#xff1a; 之前在数据结构初阶中&#xff0c;用 C 语言方式实现的栈&#xff0c;结构体中只能定义变量 &#xff1b;现在以 C 方式实现&…

什么样的台灯适合学生使用?五款暑假必入护眼大路灯分享

什么样的台灯适合学生使用&#xff1f;现在近视越来越低龄化&#xff0c;戴眼镜的小朋友越来越多&#xff0c;每每看着自己孩子眼睛贴到作业本上写作业&#xff0c;我的心都会提到嗓子眼。去医院一检查&#xff0c;果然&#xff0c;远视储备即将告罄&#xff0c;必须要防护了&a…

1500平方米气膜羽毛球馆的造价分析—轻空间

随着全民健身热潮的兴起&#xff0c;气膜羽毛球馆因其良好的空气质量、恒温恒湿的环境和快捷的建设速度&#xff0c;受到了越来越多人的欢迎。建造一个1500平方米的气膜羽毛球馆涉及多个方面的费用&#xff0c;包括场地准备、设备材料、安装施工、配套设施等。轻空间将详细分析…

企业微信内嵌H5项目接入聊天功能

产品需求是,在列表中把符合条件的列表接入聊天功能,以下是详细步骤: 1.引入企业微信 <script src"https://res.wx.qq.com/wwopen/js/jsapi/jweixin-1.0.0.js"></script> 2.获取wx签名(必须要) /*** 获取wx签名**/ export function getWxJsApi(data) {r…

DC/AC电源模块:效率与可靠性兼备的能源转换解决方案

BOSHIDA DC/AC电源模块&#xff1a;效率与可靠性兼备的能源转换解决方案 随着科技的迅速发展和人工智能技术的逐渐成熟&#xff0c;各种电子设备的需求也日益增加。然而&#xff0c;这些设备往往需要不同的电压和电流来正常工作&#xff0c;而供电方式却可能不尽相同。这时&am…

前端框架中的前端打包(Bundling)和前端构建工具(Build Tools)的作用

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介前端框架中的前端打包&#xff08;Bundling&#xff09;和前端构建工具&#xff08;Build Tools&#xff09;的作用1. 引言2. 前端打包&#xff08;Bundling&#xff09;2.1 概述2.2 常见的打包工具2.2.1 Webpack2.2.2 Parcel 2.3 …

ERP收费模式是怎样的?SAP ERP是如何收费的?

一、购置SAP ERP系统的费用组成 1、软件费用 传统的ERP系统大多为许可式&#xff0c;即企业在购买ERP服务时付清所有费用&#xff0c;将ERP系统部署于自己的服务器中。根据所购买ERP系统品牌的不同&#xff0c;价格上也有一定的差异。采购ERP系统许可后&#xff0c;后续维护、…

springboot医院门诊挂号系统-计算机毕业设计源码033123

目 录 摘要 1 绪论 1.1研究背景及意义 1.2研究现状 1.3系统开发技术的特色 1.4论文结构与章节安排 2 医院门诊挂号系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.3.2数据修改流程 2.3.3数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.…

模拟题解析:

《互联网域名管理办法》第41条规定&#xff0c;域名根服务器运行机构、域名注册管理机构和域名注册服务机构应当遵守国家相关法律、法规和标准&#xff0c;落实网络与信息安全保障措施&#xff0c;配置必要的网络通信应急设备&#xff0c;建立健全网络与信息安全监测技术手段和…

3D渲染时如何提高GPU的使用率?这7点告诉你

GPU 正逐渐取代 CPU 在 3D 渲染中的地位。我们看到许多 GPU 渲染器如 Redshift、Octane、FStorm 等不断推出。以前只支持 CPU 渲染的渲染器&#xff0c;如 Arnold、V-Ray、Renderman、Keyshot 等&#xff0c;现在也开始支持 GPU 渲染。实时渲染的发展使 GPU 更受欢迎&#xff0…

V-Series Avalon-MM DMA Interface for PCIE IP核

目录 1. IP概述 2. Avalon-MM DMA Ports 3. 参数设置 3.1 系统设置 3.2 基址寄存器 (BAR) 设置 3.3 设备识别寄存器 3.4 PCI Express和PCI功能参数 3.4.1 Device Capabilities 3.4.2 Error Reporting 3.4.3 Link Capabilities 3.4.4 MSI and MSI-X Capabilities …

【MySQL进阶之路 | 高级篇】索引及索引的数据结构

1. 为什么要使用索引 索引是存储引擎用于快速找到数据记录的一种数据结构&#xff0c;就好比一本教科书的目录&#xff0c;通过目录可以找到对应文章的页面&#xff0c;而不用一页一页从头翻到尾.MySQL也是一样的道理.在进行数据查找时&#xff0c;首先查看查询条件是否命中某…

基于weixin小程序校园快递系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;用户管理&#xff0c;订单管理&#xff0c;快递管理&#xff0c;快递记录管理&#xff0c;公告管理&#xff0c;基础数据管理 小程序功能包括&#xff1a;系统首页&#xff0c;…

Java毕设代码助力,让技术实现更流畅

Java毕设代码助力&#xff0c;让技术实现更流畅 在Java毕业设计的道路上&#xff0c;代码的编写往往占据了大部分的时间和精力。为了帮助同学们更专注于项目的核心逻辑和创意实现&#xff0c;Java毕设服务工作室专注于提供高质量的Java代码支持。 一、专业编码&#xff0c;助…

python-引用配置文件和日志

文章目录 前言python-引用配置文件和日志1. 给一个配置文件2. 获取配置文件信息方法3. 获取配置信息&#xff0c;引入日志分页功能demo4. 测试 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。 …

【乐吾乐2D可视化组态编辑器】文件

1 文件 文件&#xff1a;文件的新建、打开、导入、保存、另存为、下载JOSN文件、下载ZIP打包文件、导出为HTML、导出为Vue2组件、导出为Vue3组件、导出为React组件&#xff08;老版将不再维护&#xff09;、下载为PNG、下载为SVG 乐吾乐2D可视化组态编辑器demo&#xff1a;ht…