export default class DataTimeUtil { /**时间偏移*/ public static offset: number = 0; /** * 当前时间戳(毫秒) * @returns */ public static currentTimeMillis (): number { return new Date().getTime() + this.offset; } /** * 当前时间戳(秒) * @returns */ public static currentTimeSeconds (): number { return Math.floor((new Date().getTime() + this.offset) / 1000); } /**当前服务器日期*/ public static currentDate():Date{ return new Date(this.currentTimeMillis ()); } /**将毫秒时间戳转到当天0点时的毫秒时间戳*/ public static timestampToStartOfDay(timestamp:number):number { let date = new Date(timestamp); // 将时间戳转换为日期对象 date.setHours(0, 0, 0, 0); // 将时、分、秒、毫秒部分设置为0 return date.getTime(); // 将日期转换回时间戳 } /**将秒时间戳转到当天0点时的秒时间戳*/ public static timestampSecondsToStartOfDay(timestamp:number):number { let date = new Date(timestamp*1000); // 将时间戳转换为日期对象 date.setHours(0, 0, 0, 0); // 将时、分、秒、毫秒部分设置为0 return Math.floor(date.getTime()/1000); // 将日期转换回时间戳 } /**获取服务器到明天0点时长 */ public static longToTomorrow():number{ // 获取当前时间 const now = this.currentDate(); // 获取明天的日期 const tomorrow = new Date(now); tomorrow.setDate(now.getDate() + 1); tomorrow.setHours(0, 0, 0, 0); // 计算时间差 return tomorrow.getTime() - now.getTime(); } /**当前服务器月份*/ public static currentMonth():number{ return this.currentDate().getMonth() + 1; // 月份从0开始,所以需要加1 } /**当前服务器日期月有多少天 */ public static daysInCurrentMonth():number{ const currentYear = this.currentDate().getFullYear(); const daysInCurrentMonth = new Date(currentYear, this.currentMonth(), 0).getDate(); return daysInCurrentMonth; } public static timeMillisToDate(ms:number):Date{ return new Date(ms); } public static stringToStamp(dateString:string):number{ const timestamp: number = Date.parse(dateString) - new Date().getTimezoneOffset() * 60 * 1000; return timestamp; } public static stringToDate(dateString:string):Date{ return new Date(dateString); } public static dateToString(date:Date):string{ const year: number = date.getFullYear(); const month: number = date.getMonth() + 1; const day: number = date.getDate(); const hours: number = date.getHours(); const minutes: number = date.getMinutes(); const seconds: number = date.getSeconds(); // 自定义格式化日期和时间 const formattedDateTime: string = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')} ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`; return formattedDateTime; } /**本周一0点的时间戳*/ public static mondayTimestamp():number{ const currentDate=this.currentDate(); // 获取当前日期的星期几(星期天为0,星期一为1,以此类推) const currentDayOfWeek = currentDate.getDay(); // 计算当前日期距离周一的天数差值 const daysUntilMonday = (currentDayOfWeek === 0) ? 6 : currentDayOfWeek - 1; return currentDate.getTime() - (daysUntilMonday * 24 * 60 * 60 * 1000); } /*private _day_s = 864e5; private _diff:number=0; private updateServerTime(s:number):void{ this._diff = s - (new Date).getTime()} public now():number{return this.getTime()} public getTime():number { return (new Date).getTime() + this._diff;} public getDayStartTime(s:number):number {return new Date(s).setHours(0, 0, 0, 0)} public getDayEndTime(e:number):number { return new Date(e).setHours(23, 59, 59, 999)} public getWeekEndTime (e:number):number { var t = new Date(e).getDay(); return this.getDayEndTime(e) + (0 === t ? 0 : (7 - t) * this._day_s) } public getMonthEndTime(e:number):number { var t = new Date(e); return 11 === t.getMonth() ? t.setFullYear(t.getFullYear() + 1, 0, 0) : t.setMonth(t.getMonth() + 1, 0), t.setHours(23, 59, 59, 999) } public getDiffDayNum (e:number, t:number) { var r = this.getDayStartTime(e),o = this.getDayStartTime(t); return Math.ceil(Math.abs(r - o) / this._day_s) }*/ /**获取时间戳*/ private static getTickCount() { if(window && window.performance){ return window.performance.now(); } return (new Date()).getTime(); } //----------------------------------------------------------------------------------------------------------------------------- /** * 根据秒数格式化字符串 * @param second 秒数 * @param type 1:00:00:00 2:yyyy-mm-dd h:m:s 3:00:00(分:秒) 4:xx天前,xx小时前,xx分钟前 6:00:00(时:分) * @return * */ public static getFormatBySecond(second: number, type: number = 1): string { var str: string = ""; switch (type) { case 1: str = this.getFormatBySecond1(second); break; case 2: str = this.getFormatBySecond2(second); break; case 3: str = this.getFormatBySecond3(second); break; case 4: str = this.getFormatBySecond4(second); break; case 5: str = this.getFormatBySecond5(second); break; case 6: str = this.getFormatBySecond6(second); break; } return str; } //1: 00:00:00 private static getFormatBySecond1(t: number = 0): string { var hourst: number = Math.floor(t / 3600); var hours: string; if (hourst == 0) { hours = "00"; } else { if (hourst < 10) hours = "0" + hourst; else hours = "" + hourst; } var minst: number = Math.floor((t - hourst * 3600) / 60); var secondt: number = Math.floor((t - hourst * 3600) % 60); var mins: string; var sens: string; if (minst == 0) { mins = "00"; } else if (minst < 10) { mins = "0" + minst; } else { mins = "" + minst; } if (secondt == 0) { sens = "00"; } else if (secondt < 10) { sens = "0" + secondt; } else { sens = "" + secondt; } return hours + ":" + mins + ":" + sens; } //3:00:00(分:秒) private static getFormatBySecond3(t: number = 0): string { var hourst: number = Math.floor(t / 3600); var minst: number = Math.floor((t - hourst * 3600) / 60); var secondt: number = Math.floor((t - hourst * 3600) % 60); var mins: string; var sens: string; if (minst == 0) { mins = "00"; } else if (minst < 10) { mins = "0" + minst; } else { mins = "" + minst; } if (secondt == 0) { sens = "00"; } else if (secondt < 10) { sens = "0" + secondt; } else { sens = "" + secondt; } return mins + ":" + sens; } //2:yyyy-mm-dd h:m:s private static getFormatBySecond2(time: number): string { var date: Date = new Date(time*1000); var year: number = date.getFullYear(); var month: number = date.getMonth() + 1; //返回的月份从0-11; var day: number = date.getDate(); var hours: number = date.getHours(); var minute: number = date.getMinutes(); var second: number = date.getSeconds(); return year + "-" + month + "-" + day + " " + hours + ":" + minute + ":" + second; } //4:xx天前,xx小时前,xx分钟前 private static getFormatBySecond4(time: number): string { var t = Math.floor(time / 3600); if (t > 0) { if (t > 24) { return Math.floor(t / 24) + "天前"; } else { return t + "小时前"; } } else { return Math.floor(time / 60) + "分钟前"; } } private static getFormatBySecond5(time: number): string { //每个时间单位所对应的秒数 var oneDay: number = 3600 * 24; var oneHourst: number = 3600; var oneMinst: number = 60; var days = Math.floor(time / oneDay); var hourst: number = Math.floor(time % oneDay / oneHourst) var minst: number = Math.floor((time - hourst * oneHourst) / oneMinst) //Math.floor(time % oneDay % oneHourst / oneMinst); var secondt: number = Math.floor((time - hourst * oneHourst) % oneMinst) //time; var dayss: string = ""; var hourss: string = "" var minss: string = ""; var secss: string = "" if (time > 0) { //天 if (days == 0) { dayss = ""; //小时 if (hourst == 0) { hourss = ""; //分 if (minst == 0) { minss = ""; if (secondt == 0) { secss = ""; } else if (secondt < 10) { secss = "0" + secondt + "秒"; } else { secss = "" + secondt + "秒"; } return secss; } else { minss = "" + minst + "分"; if (secondt == 0) { secss = ""; } else if (secondt < 10) { secss = "0" + secondt + "秒"; } else { secss = "" + secondt + "秒"; } } return minss + secss; } else { hourss = hourst + "小时"; if (minst == 0) { minss = ""; if (secondt == 0) { secss = ""; } else if (secondt < 10) { secss = "0" + secondt + "秒"; } else { secss = "" + secondt + "秒"; } return secss } else if (minst < 10) { minss = "0" + minst + "分"; } else { minss = "" + minst + "分"; } return hourss + minss; } } else { dayss = days + "天"; if (hourst == 0) { hourss = ""; } else { if (hourst < 10) hourss = "0" + hourst + "小时"; else hourss = "" + hourst + "小时"; ; } return dayss + hourss; } } return ""; } //6:00:00(时:分) private static getFormatBySecond6(t: number = 0): string { var hourst: number = Math.floor(t / 3600); var minst: number = Math.floor((t - hourst * 3600) / 60); var houers: string; var mins: string; if (hourst == 0) { houers = "00"; } else if (hourst < 10) { houers = "0" + hourst; } else { houers = "" + hourst; } if (minst == 0) { mins = "00"; } else if (minst < 10) { mins = "0" + minst; } else { mins = "" + minst; } return houers + ":" + mins; } /** * 获取当前是周几 * ["星期日","星期一","星期二","星期三","星期四","星期五","星期六"] */ public static getDay(timestamp: number): number { let date = new Date(timestamp); return date.getDay(); } /** * 判定两个时间是否是同一天 */ public static isSameDate(timestamp1: number, timestamp2: number): boolean { let date1 = new Date(timestamp1); let date2 = new Date(timestamp2); return date1.getFullYear() == date2.getFullYear() && date1.getMonth() == date2.getMonth() && date1.getDate() == date2.getDate(); } /** * 日期格式化 */ public static format(d: Date, fmt: string = "yyyy-MM-dd hh:mm:ss"): string { let o = { "M+": d.getMonth() + 1, //month "d+": d.getDate(), //day "h+": d.getHours(), //hour "m+": d.getMinutes(), //minute "s+": d.getSeconds(), //second "q+": Math.floor((d.getMonth() + 3) / 3), //quarter "S": d.getMilliseconds() //millisecond } if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (d.getFullYear() + "").substr(4 - RegExp.$1.length)); 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; } /** * 计算两个时间(秒)相差天数(不满一天算0天) */ public static getDayCountSeconds(timestamp1: number, timestamp2: number): number { const d_value: number = Math.abs(timestamp2 - timestamp1); return Math.floor(d_value / (24 * 60 * 60)); } /** * 计算两个时间相差天数 */ public static dateDifference(timestamp1: number, timestamp2: number): number { const d_value: number = Math.abs(timestamp2 - timestamp1); return Math.ceil(d_value / (24 * 60 * 60 * 1000)); } }