JavaScript历史上的今天是星期几

news2025/7/8 15:00:53

前言

👏这个案例有很多点是我之前不知道的(因为是小白),所以很值得学习,

✍编程不是打字机,⭐争取明白每个细节,并努力做的更好

步骤

1.html布局,一个下拉菜单(如图)

 html布局

    <select id="year"></select>年
    <select id="month"></select>月
    <select id="day"></select>日
    星期<span id="week"></span>

2.JavaScript部分

需要声明的变量

在window.onload功能函数当中分别声明变量获取年月日星期的html元素,再生命两个变量存储今天的日期和以前的日期。

            var year=document.getElementById("year");
            var month=document.getElementById("month");
            var day=document.getElementById("day");
            var week=document.getElementById("week");
            var d=new Date();
            var oldDate=new Date();

通过for循环 生成年(倒序)

声明一个年的变量为空字符,在for循环中用来记录年的下拉列表,select中的内容是option

            //生成年
            let yearStr='';
            for(var i=2030;i>=1970;i--){
                yearStr+='<option>'+i+'</option>';
            }

代码写到这里我有一个疑问,因为我发现去掉i+后面的option,页面中的效果没有任何影响 ,为什么呢?

后来我也不知都为什么我会有这个问题,他是一个双标签啊,所以不是理所应当的嘛,在我询问大佬们的时候,大佬们纷纷提出了自己的意见,我很荣幸😉

1.格式化代码

vscode    文件,首选项,设置,输入editor.format

勾选如图

2.我感觉var声明换成const或者let可能会更好一点

let声明的作用域是块作用域不允许在作用域内出现冗余声明,const作用域也是块,同时需要在声明的时候初始化变量,不可修改const声明的变量,但是可以修改const声明对象的内部属性。var是函数作用域。

作用域从大到小:var>let>const

经过理论实践双重证明,var换成let,因为const不允许修改变量的值。

如果非要const,报错是这样的

3. 模板字符串插值

好处:主流语言都支持,代码优美,简洁易读,避免笨拙字符串连接

放上大佬的金色代码(生成年部分)

在下面块引用中简单解释一下上面的代码

Array.prototype.join()

join()方法将所有元素连接成一个字符串并返回这个字符串

关于join方法的简单eg:

const elements = ['Fire', 'Air', 'Water'];

console.log(elements.join());
// expected output: "Fire,Air,Water"

console.log(elements.join(''));
// expected output: "FireAirWater"

console.log(elements.join('-'));
// expected output: "Fire-Air-Water"

Array.prototype.push()

push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度。

const animals = ['pigs', 'goats', 'sheep'];

const count = animals.push('cows');
console.log(count);
// expected output: 4
console.log(animals);
// expected output: Array ["pigs", "goats", "sheep", "cows"]

animals.push('chickens', 'cats', 'dogs');
console.log(animals);
// expected output: Array ["pigs", "goats", "sheep", "cows", "chickens", "cats", "dogs"]

 变量获取数据

将生成的年的数据赋给year变量(.innerhtml),此时形成一个年份下拉菜单,设置当前显示年份为今年。(两句代码上面已经有了,为了方便观看这里再次插入)

            year.innerHTML=yearStr;
            year.value=d.getFullYear();  //显示当前年

月份的生成和年的相似,需要注意的是,月份是从0开始,即0表示1月,11表示12月。

            //生成月
            let monthStr='';
            for( var i=12;i>=1;i--){
                monthStr+='<option>'+i+'</option>';
            }
            month.innerHTML=monthStr;
            month.value=d.getMonth()+1;//显示当前月

这里想起了for循环的相关内容,双重for循环的打印顺序

月份的生成的区别就是当前月份显示需要+1,因为当前月份比索引值大1.

日的生成

和年月的生成有所不同,根据用户选择的月份与年份去设置日。

            // 生成日
            createDay();
            function createDay(){
                d.setFullYear(year.value);//设置年为当前
                d.setMonth(month.value);//设置月为当前

                // console.log(d);

上面代码的选择2015年11月打印的是2015.12

因为现在是11月,索引取11,year.value=12,设置date0获取上个月最后一天

d.setDate(0);//跳到上个月最后一天

设置日期

                var totalDay=d.getDate();   //代表这个月的最后一天,要根据这个来生成日
                // console.log(totalDay);

                var dayStr='';
                for(var i=1;i<=totalDay;i++){
                    dayStr+='<option>'+i+'</option>';
                }
                day.innerHTML=dayStr;
                day.value=oldDate.getDate();

Date.prototype.getDate()

根据本地时间,返回一个指定的日期对象为一个月中的哪一日(从 1--31) 

将星期变化的代码也写入createDay()函数里面

               // 星期变化放在这里
                d.setDate(day.value);
                week.innerHTML=formatWeek(d.getDay());
                console.log(d);
                

Date.prototype.setDate()

setDate() 方法根据本地时间来指定一个日期对象的天数。

日的变化和年月相关,月份,month.value获取当前11(现在是11月),减一是10,索引是10,月份就是11月。

同时将星期的数字改为大写 。

            year.onchange=function(){
                createDay();
            };
            month.onchange=function(){
                createDay();
            };
            day.onchange=function(){
                d.setFullYear(year.value);
                d.setMonth(month.value-1);//注意月份
                d.setDate(this.value);

                week.innerHTML=formatWeek(d.getDay());
            };
            function formatWeek(v){
                return ['日','一','二','三','四','五','六'][v];
            }

onchange 事件会在域的内容改变时发生。

onchange 事件也可用于单选框与复选框改变后触发的事件。

完整代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        window.onload=function(){
            var year=document.getElementById("year");
            var month=document.getElementById("month");
            var day=document.getElementById("day");
            var week=document.getElementById("week");
            var d=new Date();
            var oldDate=new Date();


            //生成年
            let yearStr='';
            for(var i=2030;i>=1970;i--){
                yearStr+='<option>'+i+'</option>';
            }
            year.innerHTML=yearStr;
            year.value=d.getFullYear();  //显示当前年

            //生成月
            let monthStr='';
            for( var i=12;i>=1;i--){
                monthStr+='<option>'+i+'</option>'; 
            }
            month.innerHTML=monthStr;
            month.value=d.getMonth()+1;//显示当前月
           

            // 生成日
            createDay();
            function createDay(){
                d.setFullYear(year.value);//设置年为当前
                d.setMonth(month.value);//设置月为当前
                d.setDate(0);//跳到上个月最后一天
                // console.log(d);

                var totalDay=d.getDate();   //代表这个月的最后一天,要根据这个来生成日
                // console.log(totalDay);

                var dayStr='';
                for(var i=1;i<=totalDay;i++){
                    dayStr+='<option>'+i+'</option>';
                }
                day.innerHTML=dayStr;
                day.value=oldDate.getDate();

                // 星期变化放在这里
                d.setDate(day.value);
                week.innerHTML=formatWeek(d.getDay());
                console.log(d);
                
            }
            year.onchange=function(){
                createDay();
            };
            month.onchange=function(){
                createDay();
            };
            day.onchange=function(){
                d.setFullYear(year.value);
                d.setMonth(month.value-1);//注意月份
                d.setDate(this.value);

                week.innerHTML=formatWeek(d.getDay());
            };
            function formatWeek(v){
                return ['日','一','二','三','四','五','六'][v];
            }

        };
    </script>
    <select id="year"></select>年
    <select id="month"></select>月
    <select id="day"></select>日
    星期<span id="week"></span>
</body>
</html>

(代码质量可能不佳,目前我是一名小白,没有能力写出更好的代码,所以大佬的代码优化,我只能get到使用了箭头函数和模板字面量插值。代码就放最原始的学习代码了)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

独家巨献!阿里专家兼Github贡献者业“大师级Dubbo实战笔记”入门到成神

Apache Dubbo是一款RPC服务开发框架&#xff0c;那何为RPC呢&#xff1f;全称为Remote Procedure Call&#xff0c;翻译过来就是远程过程调用。 使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力&#xff0c; 利用 Dubbo 提供的丰富服务治理特性&#xff0c;可…

ZYNQ使用AXI4-HP接口总线读取DDR中的数据

一、前言 最近笔者在做项目的时候需要使用zynq中的AXI4-HP总线在PL端读取DDR中的数据这种功能&#xff0c;但是网上很多历程对于这方面只是创建了一个官方提供的IP核用于测试&#xff0c;并且每次写入和读取的长度为4K字节。所以为了满足我自己的项目需求&#xff0c;笔者将官…

电脑桌面图标不见了怎么回事?正确的找回图标的2个方案

最近遇到很多用户朋友说自己的电脑桌面图标不见了&#xff0c;觉得很奇怪。用户以为是系统原因造成的。电脑桌面图标不见了怎么回事&#xff1f;图标删除了怎么办&#xff1f;这篇文章就给大家分享如何找回电脑桌面消失的图标&#xff0c;一起来看看吧&#xff01; 一、找回电脑…

DTPA PEG 异硫氰酸荧光素,DTPA PEG FITC,FITC-PEG-DTPA

产品名称&#xff1a;DTPA PEG 异硫氰酸荧光素 英文名称&#xff1a;DTPA PEG FITC&#xff0c;FITC-PEG-DTPA CAS&#xff1a;668-000-2 产地&#xff1a;西安 规格&#xff1a;1mg 5mg 10mg 纯度&#xff1a;99% 厂家&#xff1a;西安齐岳生物科技有限公司 用途&#…

arthas的监控java性能

目录1 arthas简介2 arthas下载3 arthas的使用3.1 arthas启动3.2 常用命令3.2.1 dashboard3.2.2 thread3.2.3 jad3.2.4 watch3.2.5 getstatic3.2.6 heapdump3.2.6.1 dump到指定的文件3.2.6.2 dump live 对象3.2.6.3 dump 到临时文件3.2.7 jvm3.2.8 logger3.2.9 mbean3.2.9.1 列出…

Baklib|我的企业是不是需要一个维基页面呢?

你很可能已经听说过维基百科。事实上&#xff0c;我们大多数人几乎每天都在使用维基百科来获取有关历史事件、名人或世界各地的有用信息。但是你知道公司也可以创建和维护他们自己的wiki页面吗? 随着时间的推移&#xff0c;公司会积累大量的信息。如果没有一个好的方法来存储…

Java:为什么要更新Java应用程序?

27年来&#xff0c;Java一直是企业软件开发中最流行的编程语言之一。世界上无数的系统都是使用这种广为人知的语言构建的。 传统的Java应用程序是独一无二的。它们的包中包含了运行应用程序所需的一切&#xff0c;但整体性使得开发人员在进行更改时很难保持敏捷。开发人员必须从…

项目实战——实现注册与登录模块(结尾)

目录 一、整体框架 二、前端页面授权 三、实现注册页面 四、实现登录状态的持久化 一、整体框架 二、前端页面授权 当我们登录网站的时候&#xff0c;如果没有登录&#xff0c;强制让用户重定向到 登录界面 在 router 目录下的 index.js 文件下实现。 router -> index.js…

DIVFusion:首个耦合互促低光增强图像融合的框架

DIVFusion:首个耦合互促低光增强&图像融合的框架DIVFusion:首个耦合互促低光增强&图像融合的框架写在前面问题引入Motivation主要贡献网络架构实验验证融合性能目标检测性能消融实验结论写在最后DIVFusion:首个耦合互促低光增强&图像融合的框架 论文&#xff1a;h…

攻防世界Running

Running 题目描述&#xff1a;无 题目环境&#xff1a;https://download.csdn.net/download/m0_59188912/87016663 一个可执行文件&#xff0c;执行后显示error&#xff0c;尝试binwalk文件分离。 命令&#xff1a;binwalk -e run.exe浏览分离出来的文件。 末尾发现一个run.ex…

mannose-CHO|甘露糖-醛基|甘露糖-聚乙二醇-醛基|醛基-PEG-甘露糖

mannose-CHO|甘露糖-醛基|甘露糖-聚乙二醇-醛基|醛基-PEG-甘露糖 羰基中的一个共价键跟氢原子相连而组成的一价原子团&#xff0c;叫做醛基&#xff0c;醛基结构简式是-CHO&#xff0c;醛基是亲水基团&#xff0c;因此有醛基的有机物&#xff08;如乙醛等&#xff09;有一定的…

APS高级排产软件在快消品行业的应用

快消行业是指消费频率高、使用时限短、拥有广泛的消费群体、对于消费的便利性要求很高的商品销售行业。快消行业的销售渠道种类多而复杂&#xff0c;传统业态和新兴业态等多种渠道并存。快消行业集中度逐步上升&#xff0c;竞争度加大。 随着快速消费品市场的复苏&#xff0c;经…

CNN学习笔记

目录 如何理解卷积层和池化层&#xff1f; 机器视角&#xff1a;长文揭秘图像处理和卷积神经网络架构 卷积神经网络 - 基础知识 激活函数的作用是什么&#xff1f; 激活函数&#xff08;加入非线性因素&#xff09; 提高模型鲁棒性&#xff08;抗干扰能力&#xff09;&#…

时间复杂度和空间复杂度详解

文章目录 引入 一、时间复杂度的详解及例题 1、时间复杂度的概念 2、时间复杂度的例题训练 2.1 实题训练1 2.2 实题训练2 2.3 实题训练3 2.4 实题训练4 2.5 大O符号&#xff08;Big O notation)的函数绘图 二、空间复杂度的详解及例题 1、空间复杂的的概念 2、空间复杂度…

Java注解与原理分析

使用的太多&#xff0c;被忽略的理所当然&#xff1b; 一、注解基础 注解即标注与解析&#xff0c;在Java的代码工程中&#xff0c;注解的使用几乎是无处不在&#xff0c;甚至多到被忽视&#xff1b; 无论是在JDK源码或者框架组件&#xff0c;都在使用注解能力完成各种识别和…

【Vue】url拼接参数获取解析

前言&#xff1a; 前端在开发的时候有很多情况下需要提供不带参数的链接或者带参数的链接给自己使用或者给第三方系统&#xff0c;如果提供给第三方系统使用的话一般是第三方需要通过iframe/window.open/a标签打开链接进入对应的页面。 情况一&#xff1a;获取当前浏览器地址栏…

【React二】ref与事件处理与生命周期钩子函数

关于react基础及组件化编程的可以参考本篇笔记 文章目录一、 React中的事件处理1-1 例子&#xff1a; 不要过度使用ref1-2 受控组件与非受控组件1-2-1 受控组件1-2-2 非受控组件1-3 高阶函数1-3-1 函数的柯里化1-3-2 不用柯里化的写法二、生命周期2-1 引出生命周期2-2 组件生命…

TiDB 数据库架构概述

TiDB 数据库架构概述 TiDB体系架构 水平扩容或者缩容金融级高可用实时HTAP云原生的分布式数据兼容MYSQL5.7 Region&#xff1a;存储单位&#xff0c;96~144MB之间,分布式存储在TiKV中 TiKV&#xff1a;默认三副本&#xff0c;将分布式数据存储&#xff0c;并进行存储副本。…

【ARM微型电脑/IoT设备/嵌入式】树莓派安装失败sysstat,成功后还是无法使用sar,并报错:-bash:sar:command not found

1. 安装sysstat报错 安装&#xff1a; sudo apt-get install sysstat错误如下&#xff1a; dpkg: error processing package sysstat (–configure): installed sysstat package post-installation script subprocess returned error exit status 10 Errors were encountered…

1737C - Ela and Crickets

原题链接&#xff1a; Problem - 1737C - Codeforces 题目描述&#xff1a; The problem, which involves a non-standard chess pieces type that is described below, reads: given 33 white crickets on a n⋅nn⋅n board, arranged in an "L" shape next to ea…