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>

  • 相关阅读:
    变量的创建和初始化
    HDU 1114 Piggy-Bank (dp)
    HDU 1421 搬寝室 (dp)
    HDU 2059 龟兔赛跑 (dp)
    HDU 2571 命运 (dp)
    HDU 1574 RP问题 (dp)
    HDU 2577 How to Type (字符串处理)
    HDU 1422 重温世界杯 (dp)
    HDU 2191 珍惜现在,感恩生活 (dp)
    HH实习 acm算法部 1689
  • 原文地址:https://www.cnblogs.com/catEatBird/p/6947366.html
Copyright © 2011-2022 走看看