你的生日是星期幾?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';}  //fortaResult.value = r;
}

3?一些改進思路

1.初始化年月日時將默認值?設置系統當前日期

2.可以使用?date輸入框:

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

3.使用<iframe>代替<textarea>,對周日——周六分別用不同的顏色來顯示。

?

4.用戶界面上可以加上一個生日蛋糕之類的圖片烘托氛圍。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36100.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36100.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36100.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

torch創建2d卷積層報錯

import torch import torch.nn as nn print(nn.Conv2d(3, 16, 3, padding1)) 編譯器:pycharm2023.03.05 python&#xff1a;3.11 運行上述代碼 頁面報錯&#xff1a;OSError: [WinError 126] 找不到指定的模塊。 Error loading "D:\apploadpath\pythonPath\Lib\site-…

logback自定義規則脫敏

自定義規則conversionRule public class LogabckMessageConverter extends MessageConverter {Overridepublic String convert(ILoggingEvent event) {String msg event.getMessage();if ("INFO".equals(event.getLevel().toString())) {msg .....脫敏實現}return …

搭建大型分布式服務(四十一)SpringBoot 整合多個kafka數據源-支持億級消息生產者

系列文章目錄 文章目錄 系列文章目錄前言一、本文要點二、開發環境三、原項目四、修改項目五、測試一下五、小結 前言 本插件穩定運行上百個kafka項目&#xff0c;每天處理上億級的數據的精簡小插件&#xff0c;快速上手。 <dependency><groupId>io.github.vipjo…

【ARM】MCU和SOC的區別

【更多軟件使用問題請點擊億道電子官方網站】 1、 文檔目標 了解SOC芯片和MCU芯片的區別 2、 問題場景 用于了解SOC芯片和MCU芯片的區別&#xff0c;內部結構上的區別。 3、軟硬件環境 1&#xff09;、軟件版本&#xff1a;無 2&#xff09;、電腦環境&#xff1a;無 3&am…

【小學期】安裝Navicat,可視化操作數據庫

什么是Navicat&#xff0c;如何安裝&#xff1f;如何操作&#xff1f; 1. 什么是Navicat&#xff1f; Navicat 是一款功能強大的數據庫管理工具&#xff0c;支持多種數據庫系統&#xff0c;包括 MySQL、PostgreSQL、SQLite、Oracle、MariaDB 和 SQL Server 等。Navicat 提供了…

Java——枚舉

1. 概念 枚舉是在JDK1.5之后引入的&#xff0c;主要用途是&#xff1a;將一組常量組織起來&#xff0c;在這之前表示一組常量通常使用定義常量的方式&#xff1a; public static final int RED 1; public static final int GREEN 2; public static final int BLACK 3;但是…

意識與通用人工智能:北京智源大會深度解讀

在科技迅猛發展的今天&#xff0c;人工智能&#xff08;AI&#xff09;的意識問題成為了學術界和公眾關注的焦點。北京智源大會匯聚了眾多學者&#xff0c;圍繞意識與通用人工智能&#xff08;AGI&#xff09;的關系進行了深入探討。本文將對大會的精彩觀點進行總結&#xff0c…

clickhouse join內存溢出

clickhouse join 內存溢出 前言排查步驟查看sql統計數據量統計大小優化索引優化字段增加內存最終優化 前言 在一個離線工作流中任務報錯 Code: 241. DB::Exception: Received from XXXXXX:9000. DB::Exception: Memory limit (for query) exceeded: would use 20.49 GiB (att…

第 12 課:基于隱語的VisionTransformer框架

基于之前MPC的基礎知識&#xff0c;本講主要內容是MPCViT基于SecretFlow的VisionTransformer框架&#xff0c;主要從神經網絡架構&#xff0c;隱私推理框架和實驗結果三方面介紹。 一、MPCViT&#xff1a;安全且高效的MPC友好型 Vision Transformer架構 MPCViT隱私推理總體框架…

QT中子工程的創建,以及如何在含有庫的子工程項目中引用主項目中的qt資源

1、背景 在qt中創建多項目類型,如下: CustomDll表示其中的一個動態庫子項目; CustomLib表示其中的一個靜態庫子項目; MyWidget表示主項目窗口(main函數所在項目); 2、qrc資源的共享 如何在CustomDll和CustomLib等子項目中也同樣使用 MyWidget項目中的qrc資源呢??? 直…

【AI應用探討】—決策樹應用場景

目錄 1 命名實體識別&#xff08;NER&#xff09; 2 信用評估 3 醫學診斷 4 垃圾郵件過濾 5 推薦系統 6 金融欺詐檢測 7 醫療領域的其他應用 8 網絡行為管理系統 1 命名實體識別&#xff08;NER&#xff09; 應用場景&#xff1a;在文本處理中&#xff0c;決策樹可以用…

【項目實訓】后端邏輯完善

經測試&#xff0c;我們決定前端可以同時選擇多個類型的崗位進行查詢&#xff0c;以顯示相應的公司崗位信息 于是&#xff0c;修改后端函數的邏輯&#xff1a; 后端 首先&#xff0c;因為要對checkList中的job_name進行模糊匹配查詢&#xff0c;于是使用以下代碼&#xff1a…

mybatis批量處理

批量修改 <update id"updateTaskDistributions" parameterType"java.util.List"><foreach collection"viewTaskDistributions" index"index" item"item" open"begin" close";end;" separa…

【科學計算與可視化】3. Matplotlib 繪圖基礎

安裝 pip install matplotlib 官方文檔 https://matplotlib.org/stable/api/pyplot_summary.html 主要介紹一些圖片繪制的簡要使用&#xff0c;更加詳細和進階需要可參考 以上官方文檔。 1 繪制基礎 方法名說明title()設置圖表的名稱xlabel()設置 x 軸名稱ylabel()設置 y 軸…

雙指針:比較含退格的字符串

題目鏈接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 代碼看起來繁瑣&#xff0c;但實際思想并不難。核心思路是&#xff1a;倒序遍歷&#xff0c;遇到#就記錄跳過次數&#xff0c;遇到字母就跳過記錄次數&#xff0c;最后比較不用跳過時的字母是否一樣。 class S…

負載組指南說明-負載柜

什么是負載組&#xff1f; 負載組是一種設備&#xff0c;旨在準確模擬電源在實際應用中看到的負載。這種負載組可以用電阻、電感或電容元件構建。它是一種電阻裝置&#xff0c;以熱量的形式消散一定量的能量&#xff0c;可以通過自然對流、強制空氣或水冷系統去除。 為什么要使…

江協科技51單片機學習- p11 Proteus安裝模擬51單片機

前言&#xff1a; 本文是根據嗶哩嗶哩網站上“江協科技51單片機”視頻的學習筆記&#xff0c;在這里會記錄下江協科技51單片機開發板的配套視頻教程所作的實驗和學習筆記內容。本文大量引用了江協科技51單片機教學視頻和鏈接中的內容。 引用&#xff1a; Proteus快速入門&…

可溶性聚四氟乙烯離子交換柱PFA層析柱微柱一體成型

PFA微柱&#xff0c;也叫PFA層析柱、PFA離子交換柱等&#xff0c;主要用于地質同位素超凈化、痕量、超痕量、微量元素分析實驗室。 規格參考&#xff1a;1.5ml、15ml、30ml等。 其主要特性有&#xff1a; 1、PFA層析柱&#xff08;微柱&#xff09;專為離子交換設計&#xff…

SAP ERP公有云(全稱 SAP S/4HANA Cloud Public Edition),賦能企業成為智能可持續的企業

在數字化浪潮中&#xff0c;每一家企業都需要應對快速的市場變化&#xff0c;不斷追求降本增效&#xff0c;為創新提供資源&#xff0c;發展新的業務模式&#xff0c;安全無憂地完成關鍵任務系統的轉型。 10年前&#xff0c;SAP進入云領域&#xff0c;用云ERP和覆蓋全線業務的云…

雙通道源表KEITHELY2636B詳情參數吉時利2636B

Keithley的2636B是一款2600B系列雙通道系統源表(SMU)儀器(0.1fA, 10A脈沖)。它是業界領先的電流/電壓源和測量解決方案。這種雙通道模型結合了精密電源&#xff0c;真電流源&#xff0c;6 1/2位DMM&#xff0c;任意波形發生器&#xff0c;脈沖發生器和電子負載的能力&#xff0…