/** * */ function DateParser() { this.weekArr = ["周一", "周二", "周三", "周四", "周五"]; } DateParser.prototype._padLeftZero = function (str) { str = String(str); return ("00" + str).substr(str.length); }; DateParser.prototype.getLocalTime = function (nS) { //转化时间格式 let targetDate; if (typeof parseInt(nS) != "number") { targetDate = new Date(nS); } else { targetDate = new Date(parseInt(nS) * 1000); } let str = targetDate.getFullYear() + "-" + this._padLeftZero(targetDate.getMonth() + 1) + "-" + this._padLeftZero(targetDate.getDate()) + " " + this._padLeftZero(targetDate.getHours()) + ":" + this._padLeftZero(targetDate.getMinutes() + 1); let currentDate = new Date(); let $_time_day = currentDate.getDate(); let $_time_month = currentDate.getMonth() + 1; let $_time_year = currentDate.getFullYear(); // let $_time_week = currentDate.getDay(); let timeText = ""; let time = str.substr(11, 5); if (this.isYesterday(currentDate, targetDate) == 1) { timeText = "昨天"; return timeText + " " + time; } //判断是不是同一个星期,如果是就排除 今天,昨天 这两天 let isWeekFlag = this.isWeek(currentDate, targetDate); if (isWeekFlag.is) { if (isWeekFlag.cWeek - isWeekFlag.tWeek >= 2) { timeText = this.weekArr[isWeekFlag.tWeek - 1]; return timeText + " " + time; } } if (str.substr(0, 4) == $_time_year) { //同一年份 if (str.substr(5, 2) == $_time_month) { //同一月份 if (str.substr(8, 2) == $_time_day) { return time; } else { timeText = str.substr(5, 5); } } else { timeText = str.substr(5, 5); } } else { timeText = str.substr(0, 7); } return timeText + " " + time; }; //返回出相隔多少天,如果返回 1 就代表昨天 DateParser.prototype.isYesterday = function (currentDate, targetDate) { let t = new Date( targetDate.getFullYear() + "/" + (targetDate.getMonth() + 1) + "/" + targetDate.getDate() ); let c = new Date( currentDate.getFullYear() + "/" + (currentDate.getMonth() + 1) + "/" + currentDate.getDate() ); let dateNum = (c.getTime() - t.getTime()) / (24 * 3600 * 1000); return dateNum; }; //判断你传进来的那个时间与当前时间是否为同一个星期 DateParser.prototype.isWeek = function (currentDate, targetDate) { let t = new Date( targetDate.getFullYear() + "/" + (targetDate.getMonth() + 1) + "/" + targetDate.getDate() ); let c = new Date( currentDate.getFullYear() + "/" + (currentDate.getMonth() + 1) + "/" + currentDate.getDate() ); let tWeek = t.getDay() == 0 ? 7 : t.getDay(); //星期天是0,手动改为 7 let cWeek = c.getDay() == 0 ? 7 : c.getDay(); let is = true; let dateNum = (c.getTime() - t.getTime()) / (24 * 3600 * 1000); if (dateNum >= 7) { //超出或等于7天就不是在同一个星期内 is = false; } else { if (tWeek == cWeek) { //同一天,间隔小于7天 且星期相等为同一天 is = true; } else { if (cWeek <= tWeek) { // 如果当前是星期2,而目标日期为星期5 则不同星期 is = false; } else { //只有当 目标星期 小于当前日期 才有可能为同个星期 //就是说 你传进来的时间是星期2,当前是星期5,他们的间隔小于7天就是同一个星期 is = true; } } } return { is, cWeek, tWeek }; }; let dateParserTime = new DateParser(); export default dateParserTime.getLocalTime.bind(dateParserTime);