首页 > 其他分享 >js简单日历制作

js简单日历制作

时间:2023-09-07 10:35:56浏览次数:41  
标签:years 31 日历 month mons year var js 制作

简易的效果图:

js简单日历制作_html

废话不多说,直接代码:

<!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>
<style>
    * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
    }

    .box {
        width: 500px;
        height: 500px;
        border: 2px solid #ccc;
        margin: 0 auto;
    }

    .header {
        width: 100%;
        height: 40px;
        border-bottom: 2px solid #ccc;
        display: flex;
        justify-content: center;
        align-items: center;
    }

    .month {
        margin: 0 30px;
    }

    .option {
        font-size: 30px;
        font-weight: bolder;
        color: #ccc;
        cursor: pointer;
    }

    ul li {
        list-style: none;
    }

    ul {
        width: 100%;
        height: 40px;
        display: flex;
        justify-content: left;
        align-items: center;
        flex-wrap: wrap;
    }

    li {
        width: 14%;
        line-height: 40px;
        border: 1px solid #ccc;
        text-align: center;
    }

    .mon2 {
        color: #ccc;
    }

    .mon3 {
        background-color: aqua;
    }
</style>

<body>
    <div class="box">
        <div class="header">
            <div class="option" onclick="next()">《</div>
            <div class="month"></div>
            <div class="option" onclick="prev()">》</div>
        </div>
        <div class="content">
            <ul>
                <li>一</li>
                <li>二</li>
                <li>三</li>
                <li>四</li>
                <li>五</li>
                <li>六</li>
                <li>日</li>
            </ul>
            <ul id="dates">

            </ul>
        </div>

    </div>
</body>
<script>
    var date = new Date();
    var year = date.getFullYear();
    var month = date.getMonth() + 1;
    var dates = document.getElementById('dates')
    getlist(2023, 1)
    var todaty = document.querySelector('.month');
    todaty.innerHTML = year + '年' + month + '月';
    // 月--
    function next() {
        if (month > 1) {
            month--;
        } else if (month == 1) {
            month = 12;
            year--;
        }
        todaty.innerHTML = year + '年' + month + '月';
        getlist(year, month)
    }
    // 月++
    function prev() {
        if (month < 12) {
            month++;
        } else if (month == 12) {
            month = 1;
            year++;
        }
        todaty.innerHTML = year + '年' + month + '月';
        getlist(year, month)
    }
    // 计算该月天数
    function calculateDay(years, mons) {
        let arr = []
        if (years % 4 == 0 && years % 100 != 0 || years % 400 == 0) {
            arr = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
        } else {
            arr = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
        }
        return arr[mons - 1]
    }
    // 得到天数展示数组
    function getlist(years, mons) {
        var old, now, future //上一个月/本月/下一个月天数
        now = calculateDay(years, mons)
        if (mons == 1) {
            old = calculateDay(years - 1, 12)
            future = calculateDay(years, mons + 1)
        } else if (mons == 12) {
            old = calculateDay(years, mons - 1)
            future = calculateDay(years + 1, 1)
        } else {
            old = calculateDay(years, mons - 1)
            future = calculateDay(years, mons + 1)
        }
        var fristday = new Date(mons + "/1/" + years + " 00:00:00").getDay() //本月第一天周几
        var lastday = new Date(mons + "/" + now + "/" + years + " 00:00:00").getDay() //本月最后一天周几
        var oList = getfor(old, (mons == 1 ? 13 : mons) - 1) //上一个月天数集合
        var nList = getfor(now, mons) //本月天数集合
        var fList = getfor(future, (mons == 12 ? 0 : mons) + 1) //下一个月天数集合
        if (fristday == 1) {
            var a = []
        } else {
            var a = oList.slice(-((fristday == 0 ? 7 : fristday) - 1))
        }
        var b = fList.slice(0, (7 - (lastday == 0 ? 7 : lastday)))
        // a是本月第一周上个月剩下的天数,b是本月最后一周下个月会有那几天在
        var obj = [...a, ...nList, ...b]
        var elementArray = [];
        for (let i = 0; i < obj.length; i++) {
            var str
            if (obj[i].m == mons) {
                if (obj[i].d == new Date().getDate()) {
                    str = `
                     <li class="mon3">${obj[i].d}</li>
                      `;
                } else {
                    str = `
                      <li class="mon">${obj[i].d}</li>
                     `;
                }
            } else {
                str = `
                   <li class="mon2">${obj[i].d}</li>
                 `;
            }
            elementArray.push(str)
        }
        dates.innerHTML = elementArray.join('')
    }
    // 根据天数获取当月天数数组
    function getfor(num, mon) {
        var arr = []
        for (var i = 1; i < num + 1; i++) {
            var str = {
                m: mon,
                d: i
            }
            arr.push(str)
        }
        return arr
    }
</script>

</html>


标签:years,31,日历,month,mons,year,var,js,制作
From: https://blog.51cto.com/u_14914383/7394728

相关文章

  • 银河麒麟使用kickstart二次打包制作安装镜像ISO
    系统:银河麒麟V10SP2服务器:百信恒山TS02F-F30安装方式:服务器挂载ISO镜像进行安装 1、安装mkisofs软件包:#yuminstallgenisoimage2、将SP2系统文件拷贝到工作目录里:#mkdir/mnt/isodir#mkdir/mnt/buidiso#mount-oloopKylin-Server-10-SP2-x86-Release-Build......
  • py 导入json到redis的代码示例
    这里是一个py导入json到redis的代码示例,它会将字典、列表和元组类型的值序列化为JSON字符串。在这个修改后的脚本中,使用`json.dumps()`函数对这些数据类型进行序列化处理。```pythonimportjsonimportredis#替换为您的JSON文件路径及Redis服务器连接参数json_file_pa......
  • Jquery向json对象添加键值对,读取键值对,删除键值对
    添加键值对varlabelName={};labelName["Name"]="James"labelName["Sex"]="1"结果:labelName={"Name":"James","Sex":1};读取键值对vargetData={"Label":"Dong","Sex"......
  • 【JS】对数据分组处理
    按照“谁”分组,就让这个“谁”作为结果对象的key,然后把匹配的数据分别放在这些key对应的value下面 <html><head><title>对数据分组处理</title></head><body></body><script>constdata=[{......
  • Django中JSONField的模糊查询
    项目需求多个条件并联模糊查询 筛选条件中需要使用OR查询于是用Q对象查询先说结果使用字段名__键名__icontains=keyword解决#客户地址表classUserAddress(models.Model):"""用户地址表region所在地区{"address":"详细地址",......
  • 【JS】手写防抖
    防抖分为立即执行版本和非立即执行版本 <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>防抖&......
  • JS性能优化
    JS性能优化一般来说:运算为10^8级,花费时间为一秒。内存管理内存:由可读写单元组成,表示一片可操作空间管理:人为的去操作一片空间的申请、使用和释放内存管理:开发者主动申请空间、使用空间、释放空间管理流程:申请―使用―释放内存泄漏现象内存的泄漏:当对象持续......
  • JS在数据类型前使用“+”的作用
    js在某个数据类型前使用‘+’,这个操作目的是为了将该数据类型转换为Number类型,如果转换失败,则返回NaN; 实际使用例如:+newDate() 返回当前时间戳  参考---https://blog.csdn.net/m0_46893049/article/details/125677006......
  • zone.js由入门到放弃之三——zone.js 源码分析【setTimeout篇】
    Delegate是个好东西,看看孙啸达同学对ZoneDelegate的介绍吧,这是他关于zone.js系列文章的第三篇~zone.js系列往期文章zone.js由入门到放弃之一——通过一场游戏认识zone.jszone.js由入门到放弃之二——zone.jsAPI大练兵zone.js源码分析接下来的全是干货,从头到尾,一干到底一点前置:Zon......
  • 小程序中格式化JSON数据中的日期
    小程序中格式化JSON数据中的日期 //假设原始JSON数据为constoriginalJson={name:'JohnDoe',birthdate:'1990-01-01'};//将日期格式化为标准的ISO8601格式constformattedJson={};Object.keys(originalJson).forEach(key=>{if(key==='birthdate......