bootstrap datatable根據日期條件動態顯示列

1.需要的效果如下,

.

 2.顯示列根據查詢的日期條件框變化,如圖,一直顯示到7月31日,

 3.js代碼table頁面初始化效果如下,

//table初始化
        function initDataTable() {
            var columns_source = get_columns();
            $("#table").bootstrapTable({
                src: "",
                url: "",
                isQueryFirst: false,
                sortName: "",
                sortOrder: "",
                autoHeight: true,
                //showFooter: true,
                isShowLineNumber: false,
                queryParams: function queryParams(params) {
                    var param = {
                        "beginDate": $("#beginDate", getElementContext()).val(),
                        "endDate": $("#endDate", getElementContext()).val()
                    };
                    return param;
                },
                onLoadSuccess: function (data) {
                },
                columns: columns_source
            });

            //動態加載列名
            function get_columns() {
                var weekArray = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
                var columns_source = [];
                var beginDate = $("#beginDate", getElementContext()).val();
                var endDate = $("#endDate", getElementContext()).val();
                var date_count = GetNumberOfDays(beginDate, endDate);
                for (var i = 0; i <= date_count; i++) {
                    var field = "DAY".concat(i);
                    var date_add = new Date(beginDate).setDate(new Date(beginDate).getDate() + i);
                    var date_week = weekArray[new Date(date_add).getDay()];
                    var date_month = new Date(date_add).getMonth() + 1;
                    var date_day = new Date(date_add).getDate();
                    var title = date_week.concat(" ").concat(date_month).concat("月").concat(date_day).concat("日");
                    var temp = {field: field, title: title, align: "right", valign: "middle", halign: "center"};
                    columns_source.push(temp);
                }
                ;
                return columns_source;
            };
        }
        //date1:開始日期,date2結束日期
        function GetNumberOfDays(date1, date2) {//獲得天數
            var a1 = Date.parse(new Date(date1));
            var a2 = Date.parse(new Date(date2));
            //核心:時間戳相減,然後除以天數
            var day = parseInt((a2 - a1) / (1000 * 60 * 60 * 24));
            return day
        };

4.日期控件框綁定change事件,爲防止列顯示過長,將日期範圍控制在一個月之內,選擇開始日期選擇上個月,結束日期就爲上個月的最後一天,選擇結束日期爲上個月,開始日期就爲上個月的第一天。

$("#resource_table").bootstrapTable('destroy'); 方法,將原表格銷燬,再重新init()初始化一次即可。

//時間控件觸發
        $("#beginDate", getElementContext()).bindChange(function (obj) {
            var beginDate = $("#beginDate", getElementContext()).val();
            var endDate = $("#endDate", getElementContext()).val();
            if (beginDate != "" && endDate != "") {
                var yearA = beginDate.substr(0, 4);
                var monthA = beginDate.substr(5, 2);
                var yearB = endDate.substr(0, 4);
                var monthB = endDate.substr(5, 2);
                if (yearB != yearA || monthB != monthA || beginDate > endDate) {
                    $("#endDate", getElementContext()).val(getCurrentMonthLast(beginDate));
                }
                $("#table", getElementContext()).dataTable().bootstrapTable('destroy');
                initDataTable();
            }
        });
        $("#endDate", getElementContext()).bindChange(function (obj) {
            var beginDate = $("#beginDate", getElementContext()).val();
            var endDate = $("#endDate", getElementContext()).val();
            if (beginDate != "" && endDate != "") {
                var yearA = beginDate.substr(0, 4);
                var monthA = beginDate.substr(5, 2);
                var yearB = endDate.substr(0, 4);
                var monthB = endDate.substr(5, 2);
                if (yearB != yearA || monthB != monthA || beginDate > endDate) {
                    $("#beginDate", getElementContext()).val(getCurrentMonthFirst(endDate));
                }
                $("#table", getElementContext()).dataTable().bootstrapTable('destroy');
                initDataTable();
            }
        });

        /**
         * 獲取當前月的最後一天
         * @returns {Date}
         */
        function getCurrentMonthLast(d) {
            var date = new Date(d);
            var currentMonth = date.getMonth();
            var nextMonth = ++currentMonth;
            var nextMonthFirstDay = new Date(date.getFullYear(), nextMonth, 1);
            var oneDay = 1000 * 60 * 60 * 24;
            var lastTime = new Date(nextMonthFirstDay - oneDay);
            var month = parseInt(lastTime.getMonth() + 1);
            var day = lastTime.getDate();
            if (month < 10) {
                month = '0' + month
            }
            if (day < 10) {
                day = '0' + day
            }
            return date.getFullYear() + '-' + month + '-' + day;
        }

        /**
         * 獲取當前月的第一天
         * @returns {string}
         */
        function getCurrentMonthFirst(d) {
            var date = new Date(d);
            date.setDate(1);
            var month = parseInt(date.getMonth() + 1);
            var day = date.getDate();
            if (month < 10) {
                month = '0' + month
            }
            if (day < 10) {
                day = '0' + day
            }
            return date.getFullYear() + '-' + month + '-' + day;
        }

參考:bootstrap table 動態列數

參考:如何實現BootStrapTable的動態表格

參考:jquery.dataTables動態列

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章