• JS中常用的工具类


    一、日期工具类

    /**
     * 日期时间工具类
     * @type {{dateFormat}}
     */
    var DateTime = function () {
        var patterns = {
            PATTERN_ERA: 'G', // Era 标志符 Era strings. For example: "AD" and "BC"
            PATTERN_YEAR: 'y', // 年
            PATTERN_MONTH: 'M', // 月份
            PATTERN_DAY_OF_MONTH: 'd', // 月份的天数
            PATTERN_HOUR_OF_DAY1: 'k', // 一天中的小时数(1-24)
            PATTERN_HOUR_OF_DAY0: 'H', // 24 小时制,一天中的小时数(0-23)
            PATTERN_MINUTE: 'm', // 小时中的分钟数
            PATTERN_SECOND: 's', // 秒
            PATTERN_MILLISECOND: 'S', // 毫秒
            PATTERN_DAY_OF_WEEK: 'E', // 一周中对应的星期,如星期一,周一
            PATTERN_DAY_OF_YEAR: 'D', // 一年中的第几天
            PATTERN_DAY_OF_WEEK_IN_MONTH: 'F', // 一月中的第几个星期(会把这个月总共过的天数除以7,不够准确,推荐用W)
            PATTERN_WEEK_OF_YEAR: 'w', // 一年中的第几个星期
            PATTERN_WEEK_OF_MONTH: 'W', // 一月中的第几星期(会根据实际情况来算)
            PATTERN_AM_PM: 'a', // 上下午标识
            PATTERN_HOUR1: 'h', // 12 小时制 ,am/pm 中的小时数(1-12)
            PATTERN_HOUR0: 'K', // 和 h 类型
            PATTERN_ZONE_NAME: 'z', // 时区名
            PATTERN_ZONE_VALUE: 'Z', // 时区值
            PATTERN_WEEK_YEAR: 'Y', // 和 y 类型
            PATTERN_ISO_DAY_OF_WEEK: 'u',
            PATTERN_ISO_ZONE: 'X'
        };
    
        var week = {
            'ch': {
                "0": "u65e5",
                "1": "u4e00",
                "2": "u4e8c",
                "3": "u4e09",
                "4": "u56db",
                "5": "u4e94",
                "6": "u516d"
            },
            'en': {
                "0": "Sunday",
                "1": "Monday",
                "2": "Tuesday",
                "3": "Wednesday",
                "4": "Thursday",
                "5": "Friday",
                "6": "Saturday"
            }
        };
    
        /**
         * 获取当前时间
         * @returns {string}
         */
        var handlerGetCurrentTime = function () {
            var today = new Date();
            var year = today.getFullYear();
            var month = today.getMonth() + 1;
            var day = today.getDate();
            var hours = today.getHours();
            var minutes = today.getMinutes();
            var seconds = today.getSeconds();
            var timeString = year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
            return timeString;
        };
    
        /**
         * 比较时间大小
         * time1 > time2 return 1
         * time1 < time2 return -1
         * time1 == time2 return 0
         * @param time1
         * @param time2
         * @returns {number}
         */
        var handlerCompareTime = function (time1, time2) {
            if (Date.parse(time1.replace(/-/g, "/")) > Date.parse(time2.replace(/-/g, "/"))) {
                return 1;
            } else if (Date.parse(time1.replace(/-/g, "/")) < Date.parse(time2.replace(/-/g, "/"))) {
                return -1;
            } else if (Date.parse(time1.replace(/-/g, "/")) == Date.parse(time2.replace(/-/g, "/"))) {
                return 0;
            }
        };
    
        /**
         * 是否闰年
         * @param year
         * @returns {boolean}
         */
        var handlerIsLeapYear = function (year) {
            return ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);
        };
    
        /**
         * 获取某个月的天数,从 0 开始
         * @param year
         * @param month
         * @returns {*}
         */
        var handlerGetDaysOfMonth = function (year, month) {
            return [31, (this.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
        };
    
        /**
         * 获取某个月的天数,从 0 开始
         * @param year
         * @param month
         * @returns {number}
         */
        var handlerGetDaysOfMonth2 = function (year, month) {
            // 将天置为 0,会获取其上个月的最后一天
            month = parseInt(month) + 1;
            var date = new Date(year, month, 0);
            return date.getDate();
        };
    
        /**
         * 距离现在几天的日期:负数表示今天之前的日期,0 表示今天,整数表示未来的日期
         * 如 -1 表示昨天的日期,0 表示今天,2 表示后天
         * @param days
         * @returns {string}
         */
        var handlerFromToday = function (days) {
            var today = new Date();
            today.setDate(today.getDate() + days);
            var date = today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate();
            return date;
        };
    
        /**
         * 格式化日期时间
         * @param dateTime 需要格式化的日期时间
         * @param pattern 格式化的模式,如 yyyy-MM-dd hh(HH):mm:ss.S a k K E D F w W z Z
         * @returns {*}
         */
        var handlerFormat = function (dateTime, pattern) {
            var date = new Date(dateTime);
            if (pattern == null || pattern.length == 0) {
                return date.toLocaleString();
            }
            return pattern.replace(/([a-z])1*/ig, function (matchStr, group1) {
                var replacement = "";
                switch (group1) {
                    case patterns.PATTERN_ERA: //G
                        break;
                    case patterns.PATTERN_WEEK_YEAR: //Y
                    case patterns.PATTERN_YEAR: //y
                        replacement = date.getFullYear();
                        break;
                    case patterns.PATTERN_MONTH: //M
                        var month = date.getMonth() + 1;
                        replacement = (month < 10 && matchStr.length >= 2) ? "0" + month : month;
                        break;
                    case patterns.PATTERN_DAY_OF_MONTH: //d
                        var days = date.getDate();
                        replacement = (days < 10 && matchStr.length >= 2) ? "0" + days : days;
                        break;
                    case patterns.PATTERN_HOUR_OF_DAY1: //k(1~24)
                        var hours24 = date.getHours();
                        replacement = hours24;
                        break;
                    case patterns.PATTERN_HOUR_OF_DAY0: //H(0~23)
                        var hours24 = date.getHours();
                        replacement = (hours24 < 10 && matchStr.length >= 2) ? "0" + hours24 : hours24;
                        break;
                    case patterns.PATTERN_MINUTE: //m
                        var minutes = date.getMinutes();
                        replacement = (minutes < 10 && matchStr.length >= 2) ? "0" + minutes : minutes;
                        break;
                    case patterns.PATTERN_SECOND: //s
                        var seconds = date.getSeconds();
                        replacement = (seconds < 10 && matchStr.length >= 2) ? "0" + seconds : seconds;
                        break;
                    case patterns.PATTERN_MILLISECOND: //S
                        var milliSeconds = date.getMilliseconds();
                        replacement = milliSeconds;
                        break;
                    case patterns.PATTERN_DAY_OF_WEEK: //E
                        var day = date.getDay();
                        replacement = week['ch'][day];
                        break;
                    case patterns.PATTERN_DAY_OF_YEAR: //D
                        replacement = dayOfTheYear(date);
                        break;
                    case patterns.PATTERN_DAY_OF_WEEK_IN_MONTH: //F
                        var days = date.getDate();
                        replacement = Math.floor(days / 7);
                        break;
                    case patterns.PATTERN_WEEK_OF_YEAR: //w
                        var days = dayOfTheYear(date);
                        replacement = Math.ceil(days / 7);
                        break;
                    case patterns.PATTERN_WEEK_OF_MONTH: //W
                        var days = date.getDate();
                        replacement = Math.ceil(days / 7);
                        break;
                    case patterns.PATTERN_AM_PM: //a
                        var hours24 = date.getHours();
                        replacement = hours24 < 12 ? "u4e0au5348" : "u4e0bu5348";
                        break;
                    case patterns.PATTERN_HOUR1: //h(1~12)
                        var hours12 = date.getHours() % 12 || 12; //0转为12
                        replacement = (hours12 < 10 && matchStr.length >= 2) ? "0" + hours12 : hours12;
                        break;
                    case patterns.PATTERN_HOUR0: //K(0~11)
                        var hours12 = date.getHours() % 12;
                        replacement = hours12;
                        break;
                    case patterns.PATTERN_ZONE_NAME: //z
                        replacement = handlerGetZoneNameValue(date)['name'];
                        break;
                    case patterns.PATTERN_ZONE_VALUE: //Z
                        replacement = handlerGetZoneNameValue(date)['value'];
                        break;
                    case patterns.PATTERN_ISO_DAY_OF_WEEK: //u
                        break;
                    case patterns.PATTERN_ISO_ZONE: //X
                        break;
                    default:
                        break;
                }
                return replacement;
            });
        };
    
        /**
         * 计算一个日期是当年的第几天
         * @param date
         * @returns {number}
         */
        var handlerDayOfTheYear = function (date) {
            var obj = new Date(date);
            var year = obj.getFullYear();
            var month = obj.getMonth(); //从0开始
            var days = obj.getDate();
            var daysArr = [31, (this.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
            for (var i = 0; i < month; i++) {
                days += daysArr[i];
            }
            return days;
        };
    
        /**
         * 获得时区名和值
         * @param dateObj
         * @returns {{name: string, value: string}}
         */
        var handlerGetZoneNameValue = function (dateObj) {
            var date = new Date(dateObj);
            date = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
            var arr = date.toString().match(/([A-Z]+)([-+]d+:?d+)/);
            var obj = {
                'name': arr[1],
                'value': arr[2]
            };
            return obj;
        };
    
        return {
            getCurrentTime: function () {
                return handlerGetCurrentTime();
            },
    
            compareTime: function (time1, time2) {
                return handlerCompareTime(time1, time2);
            },
    
            isLeapYear: function (year) {
                return handlerIsLeapYear(year);
            },
    
            getDaysOfMonth: function (year, month) {
                return handlerGetDaysOfMonth(year, month);
            },
    
            getDaysOfMonth2: function (year, month) {
                return handlerGetDaysOfMonth2(year, month);
            },
    
            fromToday: function (days) {
                return handlerFromToday(days);
            },
    
            format: function (dateTime, pattern) {
                return handlerFormat(dateTime, pattern);
            },
    
            dayOfTheYear: function (date) {
                return handlerDayOfTheYear(date);
            },
    
            getZoneNameValue: function (dateObj) {
                return handlerGetZoneNameValue(dateObj);
            }
        }
    }();
    
  • 相关阅读:
    41 最大子数组
    4 丑数 Ⅱ-找出第n个丑数
    写在编程初始
    lightoj 1068
    2018-11-8-内置函数(2)
    2018-11-7-内置函数(1)
    2018.11.06 生成器函数进阶&列表推导式&生成器表达式
    python2&python3的区别
    第一次打开Pycharm如何操作?
    关于做题的一些反思
  • 原文地址:https://www.cnblogs.com/smalldong/p/14133068.html
Copyright © 2020-2023  润新知