export const DateUtil = { timeSchemeKey: { "today": "today", "yesterday": "yesterday", "week": "week", "month": "month", "premonth": "premonth", "quarter": "quarter", "year": "year", "days7": "days7", "days28": "days28", "days84": "days84", "halfyear": "halfyear", "oneyear": "oneyear" }, /** * showdoc * @catalog API/工具/Date * @title 日期格式化 * @description 将条件转成字符结果 * @url format(date, format) * @method $instance.format(date, format) * @param date 必选 Date|String 需要格式化日期 * @param format 必选 String 格式化类型 * @return Date * @number 60 */ format: function (date, format = "yyyy-MM-dd hh:mm:ss") { if (!date) return; if (typeof date == "string") date = DateUtil.strToDate(date); format = format.replace(/HH/, "hh"); var o = { "M+": date.getMonth() + 1, // month "d+": date.getDate(), // day "D+": date.getDate(), // day "h+": date.getHours(), // hour "H+": date.getHours(), // hour "m+": date.getMinutes(), // minute "s+": date.getSeconds(), // second "q+": Math.floor((date.getMonth() + 3) / 3), // quarter "S": date.getMilliseconds() // millisecond } if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); if (/(Y+)/.test(format)) format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); for (var k in o) if (new RegExp("(" + k + ")").test(format)) format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)); return format; }, /** * showdoc * @catalog API/工具/Date * @title dt1与dt2日期之间:毫秒差间隔 * @description dt1与dt2日期之间毫秒差间隔 * @url milliSecondsBetween(dt1, dt2) * @method $instance.milliSecondsBetween(dt1, dt2) * @param dt1 必选 Date|String 日期时间1 * @param dt2 必选 Date|String 日期时间2 * @return Int * @number 60 */ milliSecondsBetween: function (dt1, dt2) { if (typeof dt1 == "string") dt1 = DateUtil.strToDate(dt1); if (typeof dt2 == "string") dt2 = DateUtil.strToDate(dt2); return Math.abs(dt1.getTime() - dt2.getTime()); }, /** * showdoc * @catalog API/工具/Date * @title dt1与dt2日期之间:秒差间隔 * @description dt1与dt2日期之间秒差间隔 * @url secondsBetween(dt1, dt2) * @method $instance.secondsBetween(dt1, dt2) * @param dt1 必选 Date|String 日期时间1 * @param dt2 必选 Date|String 日期时间2 * @return Int * @number 60 */ secondsBetween: function (dt1, dt2) { if (typeof dt1 == "string") dt1 = DateUtil.strToDate(dt1); if (typeof dt2 == "string") dt2 = DateUtil.strToDate(dt2); if (!dt1 || !dt2) return null; return Math.abs((dt1.getTime() - dt2.getTime()) / 1000); }, /** * showdoc * @catalog API/工具/Date * @title dt1与dt2日期之间分差间隔 * @description dt1与dt2日期之间分差间隔 * @url minutesBetween(dt1, dt2) * @method $instance.minutesBetween(dt1, dt2) * @param dt1 必选 Date|String 日期时间1 * @param dt2 必选 Date|String 日期时间2 * @return Int * @number 60 */ // 分差 minutesBetween: function (dt1, dt2) { if (typeof dt1 == "string") dt1 = DateUtil.strToDate(dt1); if (typeof dt2 == "string") dt2 = DateUtil.strToDate(dt2); if (!dt1 || !dt2) return null; return Math.floor(Math.abs((dt1.getTime() - dt2.getTime()) / (1000 * 60))); }, /** * showdoc * @catalog API/工具/Date * @title dt1与dt2日期之间时差间隔 * @description dt1与dt2日期之间时差间隔 * @url hoursBetween(dt1, dt2) * @method $instance.hoursBetween(dt1, dt2) * @param dt1 必选 Date|String 日期时间1 * @param dt2 必选 Date|String 日期时间2 * @return Int * @number 60 */ // 小时差 hoursBetween: function (dt1, dt2) { if (typeof dt1 == "string") dt1 = DateUtil.strToDate(dt1); if (typeof dt2 == "string") dt2 = DateUtil.strToDate(dt2); if (!dt1 || !dt2) return null; return Math.floor(Math.abs((dt1.getTime() - dt2.getTime()) / (1000 * 3600))); }, /** * showdoc * @catalog API/工具/Date * @title dt1与dt2日期之间天差间隔 * @description dt1与dt2日期之间天差间隔 * @url daysBetween(dt1, dt2) * @method $instance.daysBetween(dt1, dt2) * @param dt1 必选 Date|String 日期时间1 * @param dt2 必选 Date|String 日期时间2 * @return Int * @number 60 */ daysBetween: function (dt1, dt2) { if (typeof dt1 == "string") dt1 = DateUtil.strToDate(dt1); if (typeof dt2 == "string") dt2 = DateUtil.strToDate(dt2); if (!dt1 || !dt2) return null; return Math.floor(Math.abs((dt1.getTime() - dt2.getTime()) / (1000 * 3600 * 24))); }, /** * showdoc * @catalog API/工具/Date * @title dt1与dt2日期之间月差间隔 * @description dt1与dt2日期之间月差间隔 * @url daysBetween(dt1, dt2) * @method $instance.daysBetween(dt1, dt2) * @param dt1 必选 Date|String 日期时间1 * @param dt2 必选 Date|String 日期时间2 * @return Int * @number 60 */ monthsBetween: function (dt1, dt2) { if (typeof dt1 == "string") dt1 = DateUtil.strToDate(dt1); if (typeof dt2 == "string") dt2 = DateUtil.strToDate(dt2); if (!dt1 || !dt2) return null; return Math.abs((dt1.getFullYear() - dt2.getFullYear()) * 12) + Math.abs(dt1.getMonth() - dt2.getMonth()); }, /** * showdoc * @catalog API/工具/Date * @title dt1与dt2日期之间年差间隔 * @description dt1与dt2日期之间年差间隔 * @url yearsBetween(dt1, dt2) * @method $instance.yearsBetween(dt1, dt2) * @param dt1 必选 Date|String 日期时间1 * @param dt2 必选 Date|String 日期时间2 * @return Int * @number 60 */ yearsBetween: function (dt1, dt2) { if (typeof dt1 == "string") dt1 = DateUtil.strToDate(dt1); if (typeof dt2 == "string") dt2 = DateUtil.strToDate(dt2); if (!dt1 || !dt2) return null; return Math.abs(dt1.getFullYear() - dt2.getFullYear()); }, /** * showdoc * @catalog API/工具/Date * @title 获取中文星期 * @description 获取中文星期 * @url getWeekCn(dt) * @method $instance.getWeekCn(dt) * @param dt 必选 Date|String 日期时间 * @return String * @number 60 */ getWeekCn: function (dt) { var dayNames = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"); if (typeof dt == "string") dt = DateUtil.strToDate(dt); return dayNames[dt.getDay()]; }, /** * showdoc * @catalog API/工具/Date * @title 获取数字星期 * @description 获取数字星期 * @url getWeek(dt) * @method $instance.getWeek(dt) * @param dt 必选 Date|String 日期时间 * @return String * @number 60 */ getWeek: function (dt) { if (typeof dt == "string") dt = DateUtil.strToDate(dt); return dt.getDay(); }, /** * showdoc * @catalog API/工具/Date * @title 是否时间日期 * @description 是否时间日期 * @url isDateTime(dateString) * @method $instance.isDateTime(dateString) * @param dateString 必选 Date|String 日期时间 * @return boolean * @number 60 */ isDateTime: function (dateString) { if (dateString.trim() == "") return false; // 年月日时分秒正则表达式 var r = dateString .match(/^(\d{1,4})\-(\d{1,2})\-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/); var r1 = dateString .match(/^(\d{1,4})\-(\d{1,2})\-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2}).(\d{1,6})$/); var r2 = dateString .match(/^(\d{1,4})\-(\d{1,2})\-(\d{1,2}) (\d{1,2}):(\d{1,2})$/); if (r == null && r1 == null && r2 == null) { return false; } r = r || r1 || r2; if (r.length == 6) {// 时间格式为:2018-04-11 17:31 var d1 = new Date(r[1], r[2] - 1, r[3], r[4], r[5]); let num = (d1.getFullYear() == r[1] && (d1.getMonth() + 1) == r[2] && d1.getDate() == r[3] && d1.getHours() == r[4] && d1 .getMinutes() == r[5]); if (num == 0) { return false; } else return true; } var d = new Date(r[1], r[2] - 1, r[3], r[4], r[5], r[6]); let num = (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[2] && d.getDate() == r[3] && d.getHours() == r[4] && d.getMinutes() == r[5] && d.getSeconds() == r[6]); if (num == 0) { return false; } return (num != 0); }, /** * showdoc * @catalog API/工具/Date * @title 是否日期类型 * @description 是否日期类型 * @url isDate(dateString) * @method $instance.isDate(dateString) * @param dateString 必选 Date|String 日期时间 * @return boolean * @number 60 */ isDate: function (dateString) { if (dateString == "") return true; // 年月日正则表达式 var r = dateString.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/); if (r == null) { return false; } var d = new Date(r[1], r[3] - 1, r[4]); let num = (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d .getDate() == r[4]); if (num == 0) { return false; } return (num != 0); }, dateof: function (dt, type) { let result; if (!dt) return ""; if (typeof dt == "string") dt = DateUtil.strToDate(dt); switch (type) { case "y": result = dt.getFullYear(); break; case "m": result = dt.getMonth() + 1; break; case "min": result = dt.getMinutes(); break; case "time": result = DateUtil.format("yyyy-MM-dd hh:mm:ss"); break; case "date": result = DateUtil.format('yyyy-MM-dd'); break; case "weekCn": result = dt.week(); break; case "week": result = dt.getDay(); break; case "weekInYear": var first = new Date(dt.getFullYear(), 0, 1); var n = parseInt("1065432".charAt(first.getDay())); n = dt.getTime() - first.getTime() - n * 24 * 60 * 60 * 1000; n = Math.ceil(n / (7 * 24 * 60 * 60 * 1000)); result = first.getDay() != 1 ? (n + 1) : n; break; default: result = ""; } return result; }, /** * showdoc * @catalog API/工具/Date * @title 字符转换指定日期类型 * @description 字符转换指定日期类型 * @url strFormatDate(strDate,strFormat) * @method $instance.strFormatDate(strDate,strFormat) * @param strDate 必选 String 日期时间 * @param strFormat 必选 String 格式化类型 * @return Date * @number 60 */ strFormatDate: function (strDate, strFormat) { if (strDate == "" || strDate == null) return ""; let d = DateUtil.strToDate(strDate); if (!strFormat) return d; return d.format(strFormat); }, /** * showdoc * @catalog API/工具/Date * @title 字符转换日期类型 * @description 字符转换日期类型 * @url strToDate(dataStr) * @method $instance.strToDate(dataStr) * @param dataStr 必选 String 日期时间 * @return Date * @number 60 */ strToDate: function (dataStr) { if (!dataStr) return ""; if (dataStr && dataStr.constructor === Date) { // 2010.08.02 // 已经是时间类型,就不过滤。 return dataStr; } if (typeof dataStr == "string") { if (dataStr.indexOf('.') > -1) // 2010.07.13 08335 cai dataStr = dataStr.split('.')[0]; } // 只有时间字符串 01521 if (dataStr.indexOf("-") == -1 && dataStr.indexOf(".") == -1 && dataStr.indexOf(":") != -1) dataStr = DateUtil.dateOf(new Date()) + " " + dataStr; var arr = dataStr.split(/[- :]/) if (dataStr != "" && arr.length == 1) { // 当:dataStr:1,返回:2010-01-01 // 00:00:00 console.log(dataStr + " Invalid Date") return ""; } return new Date(Date.parse(dataStr)); } , /** * showdoc * @catalog API/工具/Date * @title 获得季度的第一天 * @description 获得季度的第一天 * @url getQuarterStartDay(dataStr) * @method $instance.getQuarterStartDay(dataStr) * @param dataStr 必选 Date 日期时间 * @return Date * @number 60 */ getQuarterStart: function () { var now = new Date(); var QuarterStartDate = ''; if (now.getMonth() < 3) { QuarterStartDate = new Date(now.getFullYear(), 0, 1); return this.format(QuarterStartDate, "yyyy-MM-dd"); } else if (now.getMonth() > 2 && now.getMonth() < 6) { QuarterStartDate = new Date(now.getFullYear(), 3, 1); return this.format(QuarterStartDate, "yyyy-MM-dd"); } else if (now.getMonth() > 5 && now.getMonth() < 9) { QuarterStartDate = new Date(now.getFullYear(), 6, 1); return this.format(QuarterStartDate, "yyyy-MM-dd"); } else if (now.getMonth() > 8) { QuarterStartDate = new Date(now.getFullYear(), 9, 1); return this.format(QuarterStartDate, "yyyy-MM-dd"); } }, /** * showdoc * @catalog API/工具/Date * @title 获得本季度的结束日期 * @description 获得本季度的结束日期 * @url getQuarterEndDate() * @method $instance.getQuarterEndDate() * @return Date * @number 60 */ getQuarterEndDate: function () { var now = new Date(); var QuarterStartDate = ''; if (now.getMonth() < 3) { QuarterStartDate = new Date(now.getFullYear(), 2, 31); return this.format(QuarterStartDate, "yyyy-MM-dd"); } else if (now.getMonth() > 2 && now.getMonth() < 6) { QuarterStartDate = new Date(now.getFullYear(), 5, 30); return this.format(QuarterStartDate, "yyyy-MM-dd"); } else if (now.getMonth() > 5 && now.getMonth() < 9) { QuarterStartDate = new Date(now.getFullYear(), 8, 30); return this.format(QuarterStartDate, "yyyy-MM-dd"); } else if (now.getMonth() > 8) { QuarterStartDate = new Date(now.getFullYear(), 11, 31); return this.format(QuarterStartDate, "yyyy-MM-dd"); } }, /** * showdoc * @catalog API/工具/Date * @title 获得本年度的开始日期 * @description 获得本年度的开始日期 * @url getYearStartDate() * @method $instance.getYearStartDate() * @return Date * @number 60 */ getYearStartDate: function () { var now = new Date(); var yearFirstDay = new Date(now.getFullYear(), 0, 1); return this.format(yearFirstDay, "yyyy-MM-dd"); //return yearFirstDay.format("yyyy-MM-dd"); }, /** * showdoc * @catalog API/工具/Date * @title 获得本年度的结束日期 * @description 获得本年度的结束日期 * @url getYearEndDate() * @method $instance.getYearEndDate() * @return Date * @number 60 */ getYearEndDate: function () { var now = new Date(); var yearLastDay = new Date(now.getFullYear(), 11, 31); return this.format(yearLastDay, "yyyy-MM-dd"); //return yearLastDay.format("yyyy-MM-dd"); }, /** * showdoc * @catalog API/工具/Date * @title 获得某月的天数 * @description 获得某月的天数 * @url getMonthDays(myMonth,myYear) * @method $instance.getMonthDays(myMonth,myYear) * @param myMonth,myYear 必选 int 月份 * @param myMonth,myYear 必选 int 年份 * @return Int * @number 60 */ getMonthDays: function (myMonth, myYear) { if (myYear == undefined) { var now = new Date(); myYear = now.getFullYear(); } myMonth--; var d = new Date(myYear, myMonth, 1); d.setDate(d.getDate() + 32 - d.getDate()); return (32 - d.getDate()) }, /** * showdoc * @catalog API/工具/Date * @title 获得本周的开始日期 * @description 获得本周的开始日期 * @url getWeekStartDate() * @method $instance.getWeekStartDate() * @return Date * @number 60 */ getWeekStartDate: function () { var now = new Date(); var weekStartDate = new Date(now.getFullYear(), now.getMonth(), now .getDate() - now.getDay()); return this.format(weekStartDate, "yyyy-MM-dd"); }, /** * showdoc * @catalog API/工具/Date * @title 获得本周的结束日期 * @description 获得本周的结束日期 * @url getWeekEndDate() * @method $instance.getWeekEndDate() * @return Date * @number 60 */ getWeekEndDate: function () { var now = new Date(); var weekEndDate = new Date(now.getFullYear(), now.getMonth(), now .getDate() + (6 - now.getDay())); return this.format(weekEndDate, "yyyy-MM-dd"); //return weekEndDate.format("yyyy-MM-dd"); }, /** * showdoc * @catalog API/工具/Date * @title 获得本月的开始日期 * @description 获得本月的开始日期 * @url getMonthStartDate() * @method $instance.getMonthStartDate() * @param dateVal 必选 Date|String 日期 * @return Date * @number 60 */ getMonthStartDate: function (dateVal) { var now = new Date(); if (dateVal && typeof dateVal == "string") now = DateUtil.strToDate(dateVal); var monthStartDate = new Date(now.getFullYear(), now.getMonth(), 1); return this.format(monthStartDate, "yyyy-MM-dd"); //monthStartDate.format("yyyy-MM-dd"); }, /** * showdoc * @catalog API/工具/Date * @title 获得本月的结束日期 * @description 获得本月的结束日期 * @url getMonthEndDate() * @method $instance.getMonthEndDate() * @return Date * @number 60 */ getMonthEndDate: function (dateVal) { var now = new Date(); if (dateVal && typeof dateVal == "string") now = DateUtil.strToDate(dateVal); let year = now.getFullYear(); let month = now.getMonth(); var tempDate = new Date(new Date(year, month + 1, 1).getTime() - 1000 * 60 * 60 * 24) return this.format(tempDate, "yyyy-MM-dd"); //return tempDate.format("yyyy-MM-dd"); }, /** * showdoc * @catalog API/工具/Date * @title 获当前时间 * @description 获当前时间 * @url now() * @method $instance.now(format) * @param format 可选 String 格式化 * @return Date * @number 60 */ now: function (format) { format = format || "yyyy-MM-dd hh:mm:ss"; return this.format(new Date(), format); }, /** * showdoc * @catalog API/工具/Date * @title 获时间方案 * @description 获时间方案 * @url TimeScheme(name) * @method $instance.TimeScheme(name) * @param name 必选 String 方案名称 * @return Date * @number 60 */ TimeScheme: function (name) { var startTime = " 00:00:00到", endTime = " 23:59:59"; switch (name) { case "today": return this.format(this.strToDate(this.now()), "yyyy-MM-dd") + startTime + this.format(this.strToDate(this.now()), "yyyy-MM-dd") + endTime; case "yesterday": return this .format(this.dateAdd("d", -1, this.now()), "yyyy-MM-dd") + startTime + this.format(this.dateAdd("d", -1, this .now()), "yyyy-MM-dd") + endTime; case "week": return this.getWeekStartDate() + startTime + this.getWeekEndDate() + endTime; case "month": return this.getMonthStartDate() + startTime + this.getMonthEndDate() + endTime; case "quarter": return this.getQuarterStartDate() + startTime + this.getQuarterEndDate() + endTime; case "year": return this.getYearStartDate() + startTime + this.getYearEndDate() + endTime; case "days7": return this.format(this.dateAdd("d", -7, this.now()) , "yyyy-MM-dd") + startTime + this.format(this.strToDate(this.now()), "yyyy-MM-dd") + endTime; case "days28": return this.format(this.dateAdd("d", -28, this.now()) , "yyyy-MM-dd") + startTime + this.format(this.strToDate(this.now()), "yyyy-MM-dd") + endTime; case "days84": return this.dateAdd("d", -84, this.now()) .format("yyyy-MM-dd") + startTime + this.format(this.strToDate(this.now()), "yyyy-MM-dd") + endTime; case "halfyear": return this.dateAdd("m", -6, this.now()) .format("yyyy-MM-dd") + startTime + this.format(this.strToDate(this.now()), "yyyy-MM-dd") + endTime; case "oneyear": return this.format(this.dateAdd("y", -1, this.now()) , "yyyy-MM-dd") + startTime + this.format(this.strToDate(this.now()), "yyyy-MM-dd") + endTime; } }, /** * showdoc * @catalog API/工具/Date * @title 在日期中添加或者减去指定的时间间隔天数 * @description 在日期中添加或者减去指定的时间间隔天数 * @url dateAdd(datepart, number, dtDate) * @method $instance.dateAdd(datepart, number, dtDate) * @param datepart 必选 String 间隔类型 * @param number 必选 Int 间隔数 * @param dtDate 必选 Date * @return Date * @number 60 */ dateAdd: function (datepart, number, dtDate) { if (typeof dtDate == "string") dtDate = DateUtil.strToDate(dtDate); var date = new Date(dtDate); datepart = (datepart || 'd').toLowerCase(); let diff = parseInt(number); let tempdate; switch (datepart) { case "y": // 年 tempdate = date.setYear(date.getFullYear() + diff) break; case "q": // 季度 tempdate = date.setMonth(date.getMonth() + (diff * 3)) break; case "m": // 月 var sYear = date.getFullYear(); var sMonth = date.getMonth() + 1; var sDay = date.getDate(); var eYear = sYear; var eMonth = sMonth + diff; var eDay = sDay; while (eMonth > 12) { eYear++; eMonth -= 12; } var eDate = new Date(eYear, eMonth - 1, eDay); while (eDate.getMonth() != eMonth - 1) { eDay--; eDate = new Date(eYear, eMonth - 1, eDay); } tempdate = eDate; break; case "d": // 天 tempdate = date.setDate(date.getDate() + diff); break; case "h": // 时 tempdate = date.setHours(date.getHours() + diff); break; case "mi": // 分 tempdate = date.setMinutes(date.getMinutes() + diff); break; case "s": // 秒 tempdate = date.setSeconds(date.getSeconds() + diff) break; default: tempdate = date.setDate(date.getDate() + diff); break; } return new Date(tempdate); } }