zoukankan      html  css  js  c++  java
  • 每天一个JS 小demo之日历制作。主要知识点:日期函数和对于函数封装的灵活运用

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
    td {
    text-align: center;
    }
    </style>
    </head>

    <body>

    <p>
    <select id="yearSelect"></select>
    <select id="monthSelect"></select>

    <strong></strong>
    </p>

    <table id="tab" width="100%" border="1">
    <thead>
    <tr>
    <th>日</th>
    <th>一</th>
    <th>二</th>
    <th>三</th>
    <th>四</th>
    <th>五</th>
    <th>六</th>
    </tr>
    </thead>
    <tbody></tbody>
    </table>

    <script>
    /*
    * 获取指定年月份的日期总天数
    * 显示的月份的第一天是星期几?
    * */

    var yearSelectElement = document.querySelector('#yearSelect');
    var monthSelectElement = document.querySelector('#monthSelect');
    var tbody = document.querySelector('tbody');
    var strongElement = document.querySelector('strong');

    var nowDate = new Date();

    /*
    * 动态生成option
    * */
    var html = '';
    for (var i=1970; i<2100; i++) {
    if (i == nowDate.getFullYear()) {
    html = '<option selected>'+ i +'</option>' + html;
    } else {
    html = '<option>'+ i +'</option>' + html;
    }

    }
    yearSelectElement.innerHTML = html;

    var html = '';
    for (var i=0; i<12; i++) {
    if (i == nowDate.getMonth()) {
    html += '<option value="'+i+'" selected>'+ (i+1) +'</option>';
    } else {
    html += '<option value="'+i+'">'+ (i+1) +'</option>';
    }

    }
    monthSelectElement.innerHTML = html;

    /*
    * 默认显示当前年和月的日历
    * */
    calendar(nowDate.getFullYear(), nowDate.getMonth());

    /*
    * 根据选择的年和月重新生成日历
    * */
    yearSelectElement.onchange = monthSelectElement.onchange = function() {
    calendar(yearSelectElement.value, monthSelectElement.value);
    };

    function calendar(year, month) {
    year = Number(year);
    month = Number(month);
    strongElement.innerHTML = year + '年' + (month+1) + '月';

    var html = '<tr>';
    for (var i=1; i<=42; i++) {

    if (i%7 == 1 && i != 1) {
    html += '</tr><tr>';
    }

    var v = i- getFirstDay(year, month);

    if (v < 1 || v > getDays(year, month)) {
    html += '<td>&nbsp;</td>';
    } else {
    if (i % 7 == 1 || i % 7 == 0) {
    html += '<td style="color: red">'+ v +'</td>';
    } else if (
    year == nowDate.getFullYear()
    &&
    month == nowDate.getMonth()
    &&
    v == nowDate.getDate()
    ) {
    html += '<td style="background: red; color:white;">'+ v +'</td>';
    } else {
    html += '<td>'+ v +'</td>';
    }
    }


    }
    html += '</tr>';
    tbody.innerHTML = html;
    }

    /*
    * 获取指定显示年月份的日期总天数
    * */
    function getDays(y, m) {
    return new Date(y, m+1, 1, -1, 0, 0).getDate();

    /*
    * 得到下一月的1日,-1时0分0秒的日期
    * -1 : 其实就是前一天,表示就是上个月的最后一天的23时
    * */
    var date = new Date(y, m+1, 1, -1, 0, 0);
    /*
    * 上个月最后一天的日期其实就是上个月总的天数
    * */
    return date.getDate();
    }

    /*
    * 获取指定显示的年月份的第一天是星期几
    * */
    function getFirstDay(y, m) {
    return new Date(y, m, 1).getDay();
    }
    </script>
    </body>
    </html>

  • 相关阅读:
    今天我正式走出公司...
    PHP图片处理函数
    PHP缓存知识-转载
    Nginx 服务器伪静态配置实例
    PHP防止跨站攻击的脚本
    <
    <
    <- OPENGL 10 NormalMAP ->
    <-OPENGL 9-> 阴影篇
    - OPENGL8
  • 原文地址:https://www.cnblogs.com/catEatBird/p/6947366.html
Copyright © 2011-2022 走看看