zoukankan      html  css  js  c++  java
  • JavaScript实现Select选择本周、上周、本季、上季、本年的时间选取

            //转自http://blog.csdn.net/xc_young/article/details/16878849,其上季度有错误,已修改
            var MrYangUtil = function () {
    
                this.getCurrentDate = function () {
                    return new Date();
                };
    
                this.getCurrentWeek = function () {
                    //起止日期数组  
                    var startStop = new Array();
                    //获取当前时间  
                    var currentDate = this.getCurrentDate();
                    //返回date是一周中的某一天  
                    var week = currentDate.getDay();
                    //返回date是一个月中的某一天  
                    var month = currentDate.getDate();
                    //一天的毫秒数  
                    var millisecond = 1000 * 60 * 60 * 24;
                    //减去的天数  
                    var minusDay = week != 0 ? week - 1 : 6;
                    //alert(minusDay);  
                    //本周 周一  
                    var monday = new Date(currentDate.getTime() - (minusDay * millisecond));
                    //本周 周日  
                    var sunday = new Date(monday.getTime() + (6 * millisecond));
                    //添加本周时间  
                    startStop.push(monday);//本周起始时间  
                    //添加本周最后一天时间  
                    startStop.push(sunday);//本周终止时间  
                    //返回  
                    return startStop;
                };
    
                this.getCurrentMonth = function () {
                    //起止日期数组  
                    var startStop = new Array();
                    //获取当前时间  
                    var currentDate = this.getCurrentDate();
                    //获得当前月份0-11  
                    var currentMonth = currentDate.getMonth();
                    //获得当前年份4位年  
                    var currentYear = currentDate.getFullYear();
                    //求出本月第一天  
                    var firstDay = new Date(currentYear, currentMonth, 1);
                    //当为12月的时候年份需要加1  
                    //月份需要更新为0 也就是下一年的第一个月  
                    if (currentMonth == 11) {
                        currentYear++;
                        currentMonth = 0;//就为  
                    } else {
                        //否则只是月份增加,以便求的下一月的第一天  
                        currentMonth++;
                    }
                    //一天的毫秒数  
                    var millisecond = 1000 * 60 * 60 * 24;
                    //下月的第一天  
                    var nextMonthDayOne = new Date(currentYear, currentMonth, 1);
                    //求出上月的最后一天  
                    var lastDay = new Date(nextMonthDayOne.getTime() - millisecond);
                    //添加至数组中返回  
                    startStop.push(firstDay);
                    startStop.push(lastDay);
                    //返回  
                    return startStop;
                };
    
                this.getQuarterSeasonStartMonth = function (month) {
                    var quarterMonthStart = 0;
                    var spring = 0; //春  
                    var summer = 3; //夏  
                    var fall = 6;   //秋  
                    var winter = 9;//冬  
                    //月份从0-11  
                    if (month < 3) {
                        return spring;
                    }
                    if (month < 6) {
                        return summer;
                    }
                    if (month < 9) {
                        return fall;
                    }
                    return winter;
                };
    
                this.getMonthDays = function (year, month) {
                    //本月第一天 1-31  
                    var relativeDate = new Date(year, month, 1);
                    //获得当前月份0-11  
                    var relativeMonth = relativeDate.getMonth();
                    //获得当前年份4位年  
                    var relativeYear = relativeDate.getFullYear();
                    //当为12月的时候年份需要加1  
                    //月份需要更新为0 也就是下一年的第一个月  
                    if (relativeMonth == 11) {
                        relativeYear++;
                        relativeMonth = 0;
                    } else {
                        //否则只是月份增加,以便求的下一月的第一天  
                        relativeMonth++;
                    }
                    //一天的毫秒数  
                    var millisecond = 1000 * 60 * 60 * 24;
                    //下月的第一天  
                    var nextMonthDayOne = new Date(relativeYear, relativeMonth, 1);
                    //返回得到上月的最后一天,也就是本月总天数  
                    return new Date(nextMonthDayOne.getTime() - millisecond).getDate();
                };
    
                this.getCurrentSeason = function () {
                    //起止日期数组  
                    var startStop = new Array();
                    //获取当前时间  
                    var currentDate = this.getCurrentDate();
                    //获得当前月份0-11  
                    var currentMonth = currentDate.getMonth();
                    //获得当前年份4位年  
                    var currentYear = currentDate.getFullYear();
                    //获得本季度开始月份  
                    var quarterSeasonStartMonth = this.getQuarterSeasonStartMonth(currentMonth);
                    //获得本季度结束月份  
                    var quarterSeasonEndMonth = quarterSeasonStartMonth + 2;
                    //获得本季度开始的日期  
                    var quarterSeasonStartDate = new Date(currentYear, quarterSeasonStartMonth, 1);
                    //获得本季度结束的日期  
                    var quarterSeasonEndDate = new Date(currentYear, quarterSeasonEndMonth, this.getMonthDays(currentYear, quarterSeasonEndMonth));
                    //加入数组返回  
                    startStop.push(quarterSeasonStartDate);
                    startStop.push(quarterSeasonEndDate);
                    //返回  
                    return startStop;
                };
    
                this.getCurrentYear = function () {
                    //起止日期数组  
                    var startStop = new Array();
                    //获取当前时间  
                    var currentDate = this.getCurrentDate();
                    //获得当前年份4位年  
                    var currentYear = currentDate.getFullYear();
                    //本年第一天  
                    var currentYearFirstDate = new Date(currentYear, 0, 1);
                    //本年最后一天  
                    var currentYearLastDate = new Date(currentYear, 11, 31);
                    //添加至数组  
                    startStop.push(currentYearFirstDate);
                    startStop.push(currentYearLastDate);
                    //返回  
                    return startStop;
                };
    
                this.getPriorMonthFirstDay = function (year, month) {
                    //年份为0代表,是本年的第一月,所以不能减  
                    if (month == 0) {
                        month = 11;//月份为上年的最后月份  
                        year--;//年份减1  
                        return new Date(year, month, 1);
                    }
                    //否则,只减去月份  
                    month--;
                    return new Date(year, month, 1);;
                };
    
                this.getPreviousMonth = function () {
                    //起止日期数组  
                    var startStop = new Array();
                    //获取当前时间  
                    var currentDate = this.getCurrentDate();
                    //获得当前月份0-11  
                    var currentMonth = currentDate.getMonth();
                    //获得当前年份4位年  
                    var currentYear = currentDate.getFullYear();
                    //获得上一个月的第一天  
                    var priorMonthFirstDay = this.getPriorMonthFirstDay(currentYear, currentMonth);
                    //获得上一月的最后一天  
                    var priorMonthLastDay = new Date(priorMonthFirstDay.getFullYear(), priorMonthFirstDay.getMonth(), this.getMonthDays(priorMonthFirstDay.getFullYear(), priorMonthFirstDay.getMonth()));
                    //添加至数组  
                    startStop.push(priorMonthFirstDay);
                    startStop.push(priorMonthLastDay);
                    //返回  
                    return startStop;
                };
    
                this.getPreviousWeek = function () {
                    //起止日期数组  
                    var startStop = new Array();
                    //获取当前时间  
                    var currentDate = this.getCurrentDate();
                    //返回date是一周中的某一天  
                    var week = currentDate.getDay();
                    //返回date是一个月中的某一天  
                    var month = currentDate.getDate();
                    //一天的毫秒数  
                    var millisecond = 1000 * 60 * 60 * 24;
                    //减去的天数  
                    var minusDay = week != 0 ? week - 1 : 6;
                    //获得当前周的第一天  
                    var currentWeekDayOne = new Date(currentDate.getTime() - (millisecond * minusDay));
                    //上周最后一天即本周开始的前一天  
                    var priorWeekLastDay = new Date(currentWeekDayOne.getTime() - millisecond);
                    //上周的第一天  
                    var priorWeekFirstDay = new Date(priorWeekLastDay.getTime() - (millisecond * 6));
                    //添加至数组  
                    startStop.push(priorWeekFirstDay);
                    startStop.push(priorWeekLastDay);
                    return startStop;
                };
    
                this.getPriorSeasonFirstDay = function (year, month) {
                    var quarterMonthStart = 0;
                    var spring = 0; //春  
                    var summer = 3; //夏  
                    var fall = 6;   //秋  
                    var winter = 9;//冬
                    
                    //月份从0-11  
                    switch (Math.floor(month/3)) {//季度的其实月份  
                        case 0:
                            //如果是第一季度则应该到去年的冬季  
                            year--;
                            month = winter;
                            break;
                        case 1:
                            month = spring;
                            break;
                        case 2:
                            month = summer;
                            break;
                        case 3:
                            month = fall;
                            break;
                    };
                    return new Date(year, month, 1);
                };
    
                this.getPreviousSeason = function () {
                    //起止日期数组  
                    var startStop = new Array();
                    //获取当前时间  
                    var currentDate = this.getCurrentDate();
                    //获得当前月份0-11  
                    var currentMonth = currentDate.getMonth();
                    //获得当前年份4位年  
                    var currentYear = currentDate.getFullYear();
                    //上季度的第一天  
                    var priorSeasonFirstDay = this.getPriorSeasonFirstDay(currentYear, currentMonth);
                    //上季度的最后一天  
                    var priorSeasonLastDay = new Date(priorSeasonFirstDay.getFullYear(), priorSeasonFirstDay.getMonth() + 2, this.getMonthDays(priorSeasonFirstDay.getFullYear(), priorSeasonFirstDay.getMonth() + 2));
                    //添加至数组  
                    startStop.push(priorSeasonFirstDay);
                    startStop.push(priorSeasonLastDay);
                    return startStop;
                };
    
                this.getPreviousYear = function () {
                    //起止日期数组  
                    var startStop = new Array();
                    //获取当前时间  
                    var currentDate = this.getCurrentDate();
                    //获得当前年份4位年  
                    var currentYear = currentDate.getFullYear();
                    currentYear--;
                    var priorYearFirstDay = new Date(currentYear, 0, 1);
                    var priorYearLastDay = new Date(currentYear, 11, 31);
                    //添加至数组  
                    startStop.push(priorYearFirstDay);
                    startStop.push(priorYearLastDay);
                    return startStop;
                };
            };
    
    //csdn 的 Meizz 
     /**       
     * 对Date的扩展,将 Date 转化为指定格式的String       
     * 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q) 可以用 1-2 个占位符       
     * 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)       
     * eg:       
     * (new Date()).pattern("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423       
     * (new Date()).pattern("yyyy-MM-dd E HH:mm:ss") ==> 2009-03-10 二 20:09:04       
     * (new Date()).pattern("yyyy-MM-dd EE hh:mm:ss") ==> 2009-03-10 周二 08:09:04       
     * (new Date()).pattern("yyyy-MM-dd EEE hh:mm:ss") ==> 2009-03-10 星期二 08:09:04       
     * (new Date()).pattern("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18       
     */
            Date.prototype.pattern = function (fmt) {
                var o = {
                    "M+": this.getMonth() + 1, //月份           
                    "d+": this.getDate(), //
                    "h+": this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, //小时           
                    "H+": this.getHours(), //小时           
                    "m+": this.getMinutes(), //
                    "s+": this.getSeconds(), //
                    "q+": Math.floor((this.getMonth() + 3) / 3), //季度           
                    "S": this.getMilliseconds() //毫秒           
                };
                var week = {
                    "0": "/u65e5",
                    "1": "/u4e00",
                    "2": "/u4e8c",
                    "3": "/u4e09",
                    "4": "/u56db",
                    "5": "/u4e94",
                    "6": "/u516d"
                };
                if (/(y+)/.test(fmt)) {
                    fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
                }
                if (/(E+)/.test(fmt)) {
                    fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "/u661f/u671f" : "/u5468") : "") + week[this.getDay() + ""]);
                }
                for (var k in o) {
                    if (new RegExp("(" + k + ")").test(fmt)) {
                        fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
                    }
                }
                return fmt;
            }
    var my = new MrYangUtil();
            window.onload = function () {
                var sIpt = document.getElementById('sDate');
                var eIpt = document.getElementById('eDate');
                
                document.getElementById('sel').onchange = function () {
                    switch (this.value) {
                        case "cw":
                            sIpt.value = my.getCurrentWeek()[0].pattern("yyyy-MM-dd");
                            eIpt.value = my.getCurrentWeek()[1].pattern("yyyy-MM-dd");
                            break;
                        case "pw":
                            sIpt.value = my.getPreviousWeek()[0].pattern("yyyy-MM-dd");
                            eIpt.value = my.getPreviousWeek()[1].pattern("yyyy-MM-dd");
                            break;
                        case "cm":
                            sIpt.value = my.getCurrentMonth()[0].pattern("yyyy-MM-dd");
                            eIpt.value = my.getCurrentMonth()[1].pattern("yyyy-MM-dd");
                            break;
                        case "pm":
                            sIpt.value = my.getPreviousMonth()[0].pattern("yyyy-MM-dd");
                            eIpt.value = my.getPreviousMonth()[1].pattern("yyyy-MM-dd");
                            break;
                        case "cq":
                            sIpt.value = my.getCurrentSeason()[0].pattern("yyyy-MM-dd");
                            eIpt.value = my.getCurrentSeason()[1].pattern("yyyy-MM-dd");
                            break;
                        case "pq":
                            sIpt.value = my.getPreviousSeason()[0].pattern("yyyy-MM-dd");
                            eIpt.value = my.getPreviousSeason()[1].pattern("yyyy-MM-dd");
                            break;
                        case "cy":
                            sIpt.value = my.getCurrentYear()[0].pattern("yyyy-MM-dd");
                            eIpt.value = my.getCurrentYear()[1].pattern("yyyy-MM-dd");
                            break;
                        case "py":
                            sIpt.value = my.getPreviousYear()[0].pattern("yyyy-MM-dd");
                            eIpt.value = my.getPreviousYear()[1].pattern("yyyy-MM-dd");
                            break;
                        default:
                            break;
                    }
                };
            };
     <select id="sel">
            <option value="cw">本周</option>
            <option value="pw">上周</option>
            <option value="cm">本月</option>
            <option value="pm">上月</option>
            <option value="cq">本季</option>
            <option value="pq">上季</option>
            <option value="cy">本年</option>
            <option value="py">上年</option>
        </select><br /><br/>
        <input type="text" name="name" value=" " id="sDate" />至
        <input type="text" name="name" value=" " id="eDate" />
    
  • 相关阅读:
    设计模式之 观察者模式
    设计模式之 模板方法模式
    设计模式之 状态模式
    设计模式之 策略模式
    设计模式之 桥接模式
    设计模式之 外观模式
    设计模式之 代理模式
    设计模式之 装饰者模式
    设计模式之 适配器模式
    设计模式之 组合模式
  • 原文地址:https://www.cnblogs.com/lhl98/p/4185805.html
Copyright © 2011-2022 走看看