UNPKG

@buession/prototype

Version:

A native object extension framework for Javascript.

228 lines (227 loc) 6.5 kB
"use strict"; /** * Date 对象扩展 */ /** * 判断是否为闰年 * * @return boolean */ Date.prototype.isLeapYear = function () { var year = this.getFullYear(); return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); }; /** * 获取季节 * * @return 季节 */ Date.prototype.getSeason = function () { var month = this.getMonth(); if (month >= 3 && month <= 5) { return 0; } else if (month >= 6 && month <= 8) { return 1; } else if (month >= 9 && month <= 11) { return 2; } else if (month >= 12 || month <= 2) { return 3; } else { return 0; } }; /** * 获取年份中的第几天 * * @return 年份中的第几天 */ Date.prototype.getDayOfYear = function () { var daysInMonth = [31, this.isLeapYear() ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; var days = 0; for (var m = 0, month = this.getMonth(); m < month; m++) { days += daysInMonth[m]; } return days; }; /** * 获取年份总天数 * * @return 年份总天数 */ Date.prototype.getDaysOfYear = function () { return this.isLeapYear() ? 366 : 365; }; /** * Format a date object into a string value. * @param format string - the desired format of the date * * The format can be combinations of the following: * * y - 年 * n - 季度(1 到 4) * N - 季度名称 * A - 季度中文名称 * M - 月 * f - 月(Jan 到 Dec) * F - 月(January 到 December) * C - 月,中文名称 * d - 日 * Y - 年份中的第几天(0 到 365) * T - 月份有几天(28 到 30) * j - 每月天数后面的英文后缀(st,nd,rd 或者 th) * e - 星期几,数字表示,0(表示星期天)到 6(表示星期六) * E - 星期几,数字表示,1(表示星期一)到 7(表示星期天) * l - 星期几,文本表示,3 个字母(Mon 到 Sun) * L - 星期几,完整的文本格式(Sunday 到 Saturday) * w - 星期几,中文名称 * W - 一月中第几个星期几 * i - 月份中的第几周 * o - 年份中的第几周 * h - 小时(1~12) * H - 小时(0~23) * m - 分 * s - 秒 * S - 毫秒 * a - 上午/下午标记 * O - 与格林威治时间相差的小时数 * P - 与格林威治时间相差的小时数,小时和分钟之间有冒号分隔 * Z - 时区 * * @return 格式化后的日期时间 */ Date.prototype.format = function (format) { if (Object.isString(format) === false) { throw "Invalid argument format"; } var _season_map = { "N": ["Spring", "Summer", "Autumn", "Winter"], "A": ["\u6625", "\u590f", "\u79cb", "\u51ac"] }; var _month_map = { "f": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], "F": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], "C": ["\u4E00", "\u4E8C", "\u4E09", "\u56DB", "\u4E94", "\u516D", "\u4E03", "\u516B", "\u4E5D", "\u5341", "\u5341\u4E00", "\u5341\u4E8C"] }; var _weekday_map = { "W": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], "WW": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], "WC": ["\u65E5", "\u4E00", "\u4E8C", "\u4E09", "\u56DB", "\u4E94", "\u516D"] }; var seasonFn = () => { var month = this.getMonth(); if (month === 11 || month >= 0 && month <= 1) { return 1; } else if (month >= 2 && month <= 4) { return 2; } else if (month >= 5 && month <= 7) { return 3; } else if (month >= 8 && month <= 10) { return 4; } else { return 0; } }; var $funcs = { // 年 "y": pattern => { return (this.getFullYear() + "").substring(4 - pattern.length); }, // 季度(1 到 4) "n": () => { return seasonFn(); }, // 季度名称 "N": () => { return _season_map["N"][seasonFn() - 1]; }, // 季度中文名称 "A": () => { return _season_map["A"][seasonFn() - 1]; }, // 月 "M": pattern => { var $month = this.getMonth() + 1; var result = $month < 10 ? "0" + $month : "" + $month; return result.substring(2 - pattern.length); }, // 月(Jan 到 Dec) "f": () => { var $month = this.getMonth(); return _month_map["f"][$month]; }, // 月(January 到 December) "F": () => { var $month = this.getMonth(); return _month_map["F"][$month]; }, // 月,中文名称 "C": () => { var $month = this.getMonth(); return _month_map["C"][$month]; }, // 星期数字,0 到 6 表示 "e": () => { return this.getDay(); }, // 星期数字,1 到 7 表示 "E": () => { return this.getDay() + 1; }, // 星期英文缩写 "l": () => { var $weekday = this.getDay(); return _weekday_map["W"][$weekday]; }, // 星期英文全称 "L": () => { var $weekday = this.getDay(); return _weekday_map["WC"][$weekday]; }, // 星期中文名称 "w": () => { var $weekday = this.getDay(); return _weekday_map["WC"][$weekday]; }, // 日 "d": pattern => { var $date = this.getDate(); var result = $date < 10 ? "0" + $date : "" + $date; return result.substring(2 - pattern.length); }, // 小时 "h": pattern => { var $hour = this.getHours(); var result = $hour % 12 === 0 ? "12" : $hour % 12; result = $hour < 10 ? "0" + $hour : "" + $hour; return result.substring(2 - pattern.length); }, // 小时 "H": pattern => { var $hour = this.getHours(); var result = $hour < 10 ? "0" + $hour : "" + $hour; return result.substring(2 - pattern.length); }, // 分钟 "m": pattern => { var $minutes = this.getMinutes(); var result = $minutes < 10 ? "0" + $minutes : "" + $minutes; return result.substring(2 - pattern.length); }, // 秒钟 "s": pattern => { var $seconds = this.getSeconds(); var result = $seconds < 10 ? "0" + $seconds : "" + $seconds; return result.substring(2 - pattern.length); }, // 毫秒 "S": pattern => { var $mise = this.getMilliseconds(); var result = $mise < 10 ? "0" + $mise : "" + $mise; return result.substring(2 - pattern.length); } }; return format.replace(/([ynNAMfFCdYTjeElLwWiohHmsSaOPZ])+/g, (all, t) => { var fn = $funcs[t]; return Object.isFunction(fn) ? fn(all) : all; }); };