import moment from 'moment'; moment.defineLocale('zh-cn', { months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'), weekdaysMin: '日_一_二_三_四_五_六'.split('_'), longDateFormat: { LT: 'HH:mm', LTS: 'HH:mm:ss', L: 'YYYY/MM/DD', LL: 'YYYY年M月D日', LLL: 'YYYY年M月D日Ah点mm分', LLLL: 'YYYY年M月D日ddddAh点mm分', l: 'YYYY/M/D', ll: 'YYYY年M月D日', lll: 'YYYY年M月D日 HH:mm', llll: 'YYYY年M月D日dddd HH:mm' }, meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, meridiemHour: function (hour, meridiem) { if (hour === 12) { hour = 0; } if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { return hour; } else if (meridiem === '下午' || meridiem === '晚上') { return hour + 12; } else { // '中午' return hour >= 11 ? hour : hour + 12; } }, meridiem: function (hour, minute, isLower) { let hm = hour * 100 + minute; if (hm < 600) { return '凌晨'; } else if (hm < 900) { return '早上'; } else if (hm < 1130) { return '上午'; } else if (hm < 1230) { return '中午'; } else if (hm < 1800) { return '下午'; } else { return '晚上'; } }, calendar: { sameDay: '[今天]LT', nextDay: '[明天]LT', nextWeek: '[下]ddddLT', lastDay: '[昨天]LT', lastWeek: '[上]ddddLT', sameElse: 'L' }, dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/, ordinal: function (numberVal, period) { switch (period) { case 'd': case 'D': case 'DDD': return numberVal + '日'; case 'M': return numberVal + '月'; case 'w': case 'W': return numberVal + '周'; default: return numberVal; } }, relativeTime: { future: '%s内', past: '%s前', s: '几秒', ss: '%d 秒', m: '1 分钟', mm: '%d 分钟', h: '1 小时', hh: '%d 小时', d: '1 天', dd: '%d 天', M: '1 个月', MM: '%d 个月', y: '1 年', yy: '%d 年' }, week: { // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 dow: 1, doy: 4 // The week that contains Jan 4th is the first week of the year. } }); const ROWS_OF_CALENDAR = 6; const DAYS_OF_A_WEEK = 7; /** * 获取日历面板 * 参数为某天的日期 */ function getCalendar(date) { const firstDate = date.clone().date(1); const firstWeek = getAWeek(firstDate); const nextMonthFirstDate = firstDate.clone().add(1, 'months'); const lastDate = nextMonthFirstDate.clone().date(0); const lastWeek = getAWeek(lastDate); const ret = [firstWeek]; let i; for (i = 1; i < ROWS_OF_CALENDAR; i++) { let sunday = firstDate.clone().day(0).day(i * DAYS_OF_A_WEEK); if (sunday.isBefore(lastWeek[0].dateModel)) { ret.push(getAWeek(sunday)); } else { ret.push(lastWeek); break; } } let j; for (j = ret.length; j < ROWS_OF_CALENDAR; j++) { let sunday = firstDate.clone().day(0).day(j * DAYS_OF_A_WEEK); ret.push(getAWeek(sunday)); } return ret; } /** * 获取某天所在的一周 */ function getAWeek(date) { const week = []; range(DAYS_OF_A_WEEK).forEach((i) => { week.push(new ViewDate({ dateModel: date.clone().day(i), })); }); return week; } /** * ViewDate 类型 * 该类型对象的 dateModel 属性为一个 moment 类型对象 * 对 moment 进行一次封装,方便扩展属性 */ function ViewDate(options) { this.dateModel = options.dateModel; this.formattedDate = this.dateModel.format('YYYY-MM-DD'); } /** * 获取星期的文案 * ['日', '一', '二', ....] */ function getWeekdays(calendar) { const week = calendar[0]; const ret = []; return week.map((item) => { return moment.weekdaysMin(item.dateModel.day()); }); } function changeDate(date, type, method) { date = date.clone(); date[method](1, type); return date; } function range(count) { const list = []; let i; for (i = 0; i < count; i++) { list.push(i); } return list; } /** * CalendarDecorator * 对日历面板进行统一的属性扩展工具 */ const CalendarDecorator = { trigger(calendar) { const flatList = calendar.reduce((accumulate, item) => { return accumulate.concat(item); }, []); return (decorator) => { flatList.forEach((item) => { decorator(item); }); return calendar; }; }, decorator: { targetMonth(date, item) { if (!date.isSame(item.dateModel, 'month')) { item.targetMonth = false; } else { item.targetMonth = true; } }, disabled(startDate, endDate, item) { if ((startDate && item.dateModel.isBefore(startDate)) || (endDate && item.dateModel.isAfter(endDate))) { item.disabled = true; } else { item.disabled = false; } } } }; export default { CalendarDecorator, getCalendar, getWeekdays, changeDate }; //# sourceMappingURL=utils.js.map