UNPKG

@cataract6545/tmui

Version:

tm-vuetify是一个新势力由主题驱动的UI组件库,相比其它优势大,组件全,设计趋势紧跟未来。具有主题生成,主题实时切换,暗黑实时切换,lottie动画,图表等新颖功能,tmui TMUI

171 lines (154 loc) 5.48 kB
import { showDetail, timeDetailType, timeArrayType } from "./interface" import * as dayjs from "../../tool/dayjs/esm/index" import isSameOrBefore from '../../tool/dayjs/esm/plugin/isSameOrBefore/index'; import isSameOrAfter from '../../tool/dayjs/esm/plugin/isSameOrAfter/index'; import isBetween from '../../tool/dayjs/esm/plugin/isBetween/index'; type dateType = 'year' | 'month' | 'date' | 'hour' | 'minute' | 'second' const DayJs = dayjs.default; DayJs.extend(isBetween) DayJs.extend(isSameOrBefore) DayJs.extend(isSameOrAfter) function rangeNumber(from = 0, to = 0) { let range: Array<number> = [] from = from >= 0 ? from : 1 for (let i = from; i <= to; i++) { range.push(i) } return range } /** 根据显示的时间字段返回相关的时间列的可选选项. */ export function rangeTimeArray(dateStr: string | number | Date | dayjs.Dayjs, start: string | number | Date | dayjs.Dayjs, end: string | number | Date | dayjs.Dayjs, detail: showDetail) { let startDayjs = DayJs(start); let endDayjs = DayJs(end); let dateDayjs = DayJs(dateStr); // 计算每一列表数组开始和结束的数字. let dateArray = { year: [] as Array<number>, month: [] as Array<number>, date: [] as Array<number>, hour: [] as Array<number>, minute: [] as Array<number>, second: [] as Array<number>, }; // 计算年份数组 let startYear = startDayjs.year(); let endYear = endDayjs.year(); for (let year = startYear; year <= endYear; year++) { dateArray.year.push(year); } // 计算月份数组 let startMonth = dateDayjs.isSame(startDayjs, 'year') ? startDayjs.month() : 0; let endMonth = dateDayjs.isSame(endDayjs, 'year') ? endDayjs.month() : 11; for (let month = startMonth; month <= endMonth; month++) { dateArray.month.push(month); } // 计算日期数组 let startDate = dateDayjs.isSame(startDayjs, 'month') ? startDayjs.date() : 1; let endDate = dateDayjs.isSame(endDayjs, 'month') ? endDayjs.date() : dateDayjs.daysInMonth(); for (let date = startDate; date <= endDate; date++) { dateArray.date.push(date); } // 计算小时数组 let startHour = dateDayjs.isSame(startDayjs, 'date') ? startDayjs.hour() : 0; let endHour = dateDayjs.isSame(endDayjs, 'date') ? endDayjs.hour() : 23; for (let hour = startHour; hour <= endHour; hour++) { dateArray.hour.push(hour); } // 计算分钟数组 let startMinute = dateDayjs.isSame(startDayjs, 'hour') ? startDayjs.minute() : 0; let endMinute = dateDayjs.isSame(endDayjs, 'hour') ? endDayjs.minute() : 59; for (let minute = startMinute; minute <= endMinute; minute++) { dateArray.minute.push(minute); } // 计算秒钟数组 let startSecond = dateDayjs.isSame(startDayjs, 'minute') ? startDayjs.second() : 0; let endSecond = dateDayjs.isSame(endDayjs, 'minute') ? endDayjs.second() : 59; for (let second = startSecond; second <= endSecond; second++) { dateArray.second.push(second); } return dateArray; } /** * 根据现有时间取得当前的索引位置顺序 * @param tmArray * @param nowtime * @param detail */ export function getIndexNowbydate(tmArray: timeArrayType, nowtime: dayjs.Dayjs, detail: showDetail) { const d = DayJs(nowtime) const intermediate = [ [timeDetailType.year, detail.year], [timeDetailType.month, detail.month], [timeDetailType.day, detail.day], [timeDetailType.hour, detail.hour], [timeDetailType.minute, detail.minute], [timeDetailType.second, detail.second] ]; const idx = intermediate.filter(m => m[1]).map(m => { const type = m[0] as timeDetailType; const index = tmArray[type].findIndex(n => n === d.get(type)) return index === -1 ? 0 : index; }); return [ ...idx, ...[0, 0, 0, 0, 0, 0] ].slice(0, 6); } /** * 根据现有索引值返回当前时间。 * @param tmArray * @param nowtime * @param detail */ export function getNowbyIndex(tmArray: timeArrayType, nowIndex: Array<number>, detail: showDetail) { const intermediate = [ [timeDetailType.year, detail.year], [timeDetailType.month, detail.month], [timeDetailType.day, detail.day], [timeDetailType.hour, detail.hour], [timeDetailType.minute, detail.minute], [timeDetailType.second, detail.second] ]; function getValue(type: timeDetailType) { const index = intermediate.filter(m => m[1]).findIndex(m => m[0] === type); if (index !== -1) { return tmArray[type][nowIndex[index]]; } return tmArray[type][tmArray[type].length - 1]; } let year = getValue(timeDetailType.year); let month = getValue(timeDetailType.month); let date = getValue(timeDetailType.day); let hour = getValue(timeDetailType.hour); let minute = getValue(timeDetailType.minute); let second = getValue(timeDetailType.second); let str = year + "/" + (month + 1) + "/" + date + " " + hour + ":" + minute + ":" + second return DayJs(str).format("YYYY/MM/DD HH:mm:ss") } /** * 检查提供的时候是否是有效的时间段内,并返回正确的可用时间. * @param nowdate * @param start * @param end */ export function checkNowDateisBetween(nowdate: string | number | Date | dayjs.Dayjs, start: string | number | Date | dayjs.Dayjs, end: string | number | Date | dayjs.Dayjs) { nowdate = DayJs(nowdate).isValid() ? DayJs(nowdate) : DayJs() start = DayJs(start) end = DayJs(end) if (nowdate.isSameOrBefore(start)) { return start.format("YYYY/MM/DD HH:mm:ss") } if (nowdate.isSameOrAfter(end)) { return end.format("YYYY/MM/DD HH:mm:ss") } return nowdate.format("YYYY/MM/DD HH:mm:ss") }