zoukankan      html  css  js  c++  java
  • jQuery+Day.js获取指定日期范围按周划分信息

    Day.js中文官网

    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="utf-8">
        <title>测试标题</title>
        <script src="https://cdn.bootcdn.net/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
        <script src="https://unpkg.com/dayjs@1.8.29/dayjs.min.js"></script>
        <script src="https://unpkg.com/dayjs@1.8.29/plugin/isoWeek.js"></script>
        <script src="https://unpkg.com/dayjs@1.8.29/plugin/weekOfYear.js"></script>
        <script src="https://unpkg.com/dayjs@1.8.29/plugin/weekYear.js"></script>
        <script src="https://unpkg.com/dayjs@1.8.29/plugin/dayOfYear.js"></script>
        <script src="https://unpkg.com/dayjs@1.8.29/plugin/isLeapYear.js"></script>
        <script src="https://unpkg.com/dayjs@1.8.29/plugin/isoWeeksInYear.js"></script>
        <script src="https://unpkg.com/dayjs@1.8.29/plugin/isSameOrBefore.js"></script>
        <script src="https://unpkg.com/dayjs@1.8.29/plugin/isSameOrAfter.js"></script>
    
    
        <script>
            dayjs.extend(window.dayjs_plugin_weekOfYear)
            dayjs.extend(window.dayjs_plugin_dayOfYear)
            dayjs.extend(window.dayjs_plugin_weekYear)
            dayjs.extend(window.dayjs_plugin_isoWeek)
            dayjs.extend(window.dayjs_plugin_isLeapYear)
            dayjs.extend(window.dayjs_plugin_isoWeeksInYear)
            dayjs.extend(window.dayjs_plugin_isSameOrBefore)
            dayjs.extend(window.dayjs_plugin_isSameOrAfter)
        </script>
    
        <script>
            $(document).ready(function () {
                $('#button').on('click', function () {
                    var startTime = $('#startTime').val();
                    var endTime = $('#endTime').val();
                    $('#gridTable > tbody').html('');
                    getWeekInfoInYear(startTime, endTime);
                });
            });
    
            function getWeekNumInYear(date) {
                return dayjs(date).week();
            }
    
            function getYear(date) {
                return dayjs(date).year();
            }
    
            function getWeekInfoInYear(startTime, endTime) {
                var startTimeObj = dayjs(startTime);
                var endTimeObj = dayjs(endTime);
                var weekInfoList = new Array();
                for (var year = getYear(startTime); year <= getYear(endTime); year++) {
                    var totalWeek = dayjs(year).isoWeeksInYear();
                    for (var i = 1; i <= totalWeek; i++) {
                        var pass = true;
                        
                        // 获取当前星期的星期一和星期天日期
                        var start = dayjs(year+'01-01').week(i).isoWeekday(1).format('YYYY-MM-DD');
                        var end = dayjs(year+'01-01').week(i).isoWeekday(7).format('YYYY-MM-DD');
    
                        //如果起始时间大于当前区间开始时间,小于区间结束时间,将区间开始时间 = 起始时间
                        if (startTimeObj.isSameOrAfter(dayjs(start)) && startTimeObj.isSameOrBefore(dayjs(end))) {
                            start = startTimeObj.format('YYYY-MM-DD');
                        }
    
                        //如果终止时间大于当前区间开始时间,小于区间结束时间,将区间结束时间 = 终止时间
                        if (endTimeObj.isSameOrAfter(dayjs(start)) && endTimeObj.isSameOrBefore(dayjs(end))) {
                            end = endTimeObj.format('YYYY-MM-DD');
                        }
    
                        //如果当前区间结束时间小于起始时间 或者 当前区间开始时间大于结束时间 则不落入范围内排除
                        if (dayjs(end).isBefore(startTime) || dayjs(start).isAfter(endTime)) {
                            pass = false;
                        }
    
                        if (pass) {
                            var weekMap = {
                                year: year,
                                week: i,
                                start: start,
                                end: end
                            };
                            weekInfoList.push(weekMap);
                        }
                    }
                }
                console.info(weekInfoList);
                for (var i = 0; i < weekInfoList.length; i++) {
                    var element = $('#gridTable > tbody');
                    element.append('<tr>');
                    element.append('<td>' + weekInfoList[i].year + '</td><td>' + weekInfoList[i].week + '</td><td>' + weekInfoList[i].start + '</td><td>' + weekInfoList[i].end + '</td>');
                    element.append('</tr>');
                }
            }
        </script>
    </head>
    
    <body>
        <h1 style="color:red">基于dayjs获取某一范围内按周划分信息</h1>
        <div>开始时间<input id="startTime" /></div>
        <div>结束时间<input id="endTime" /></div>
        <button id="button">计算</button>
        <table id="gridTable" border="1">
            <thead>
                <tr>
                    <th>年份</th>
                    <th>星期数</th>
                    <th>开始时间</th>
                    <th>结束时间</th>
                </tr>
            </thead>
            <tbody>
    
            </tbody>
        </table>
    </body>
    
    </html>
    

  • 相关阅读:
    .NET Framework 4.5 中新增的'可移植类库'功能
    使用visual sutdio右键菜单封装字段
    Visual Studio 2008的“组织using”菜单
    HTML5与HTML4的区别
    【百度地图API】如何制作公交线路的搜索?如331路
    【百度地图API】如何给自定义覆盖物添加事件
    【百度地图API】如何制作自定义样式的公交导航结果面板?
    【百度地图API】如何制作可拖拽的沿道路测距
    透过【百度地图API】分析双闭包问题
    【百度地图API】如何用圆形搜索获取中心点周围100米内全部关键点?如天安门附近所有的餐厅、加油站、宾馆、大厦等
  • 原文地址:https://www.cnblogs.com/cgydawn/p/13257647.html
Copyright © 2011-2022 走看看