123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- import dayjs from 'dayjs';
- import { isoWeekday } from '../_util/dayjs/iso-weekday';
- export function getMonthListFromRange(start, end) {
- if (start.isAfter(end))
- throw new Error("Start time can't be later than end time.");
- var result = [];
- var current = start.date(1);
- while (!current.isAfter(end)) {
- result.push(current.date(1));
- current = current.add(1, 'month');
- }
- return result;
- }
- export function defaultMonthRange() {
- var start = dayjs().startOf('date');
- var end = dayjs().startOf('date').add(2, 'month');
- return [start.toDate().getTime(), end.toDate().getTime()];
- }
- /**
- *
- * @param month 月份的某一天
- * @param weekStartsOn 日历以星期几开始
- * @returns 获取当月日历所有的日子
- */
- export function getDate(month, weekStartsOn) {
- var startOfMonth = month.date(1);
- var cells = [];
- var iterator = startOfMonth
- .subtract(isoWeekday(startOfMonth) % 7, 'day')
- .startOf('day');
- if (weekStartsOn === 'Monday') {
- iterator = iterator.add(1, 'day');
- if (iterator.isSame(startOfMonth, 'month') &&
- !iterator.isSame(startOfMonth.startOf('date'), 'date')) {
- iterator = iterator.add(-7, 'days');
- }
- }
- var diffDay = startOfMonth.date(1).add(1, 'month').diff(iterator, 'day');
- var lintCount = Math.ceil(diffDay / 7);
- while (cells.length < lintCount * 7) {
- cells.push(iterator);
- iterator = iterator.add(1, 'day');
- }
- return cells;
- }
- export function renderCells(cellsMonth, weekStartsOn, value, localeText) {
- var _a;
- var rowBeginDay = 0;
- var rowEndDay = 6;
- if (weekStartsOn === 'Monday') {
- rowBeginDay = 1;
- rowEndDay = 0;
- }
- var dates = getDate(cellsMonth, weekStartsOn);
- if (!value) {
- return dates.map(function (d) {
- var isToday = dayjs().isSame(d, 'day');
- var isRowBegin = d.isSame(cellsMonth.startOf('month'), 'date') ||
- d.day() === rowBeginDay;
- var isRowEnd = d.isSame(cellsMonth.endOf('month'), 'date') || d.day() === rowEndDay;
- var top;
- if (isToday) {
- top = {
- label: localeText.today,
- };
- }
- return {
- disabled: false,
- time: d.toDate().getTime(),
- date: d.get('date'),
- isSelected: false,
- isSelectedBegin: false,
- top: top,
- isSelectedEnd: false,
- inThisMonth: d.month() === cellsMonth.month(),
- isRowBegin: isRowBegin,
- isRowEnd: isRowEnd,
- };
- });
- }
- var selectBegin;
- var selectEnd;
- if (Array.isArray(value)) {
- selectBegin = dayjs(value[0]);
- selectEnd = dayjs((_a = value[1]) !== null && _a !== void 0 ? _a : value[0]);
- }
- else {
- selectBegin = dayjs(value);
- selectEnd = dayjs(value);
- }
- return dates.map(function (d) {
- var isToday = dayjs().isSame(d, 'day');
- var isRowBegin = d.isSame(cellsMonth.startOf('month'), 'date') || d.day() === rowBeginDay;
- var isRowEnd = d.isSame(cellsMonth.endOf('month'), 'date') || d.day() === rowEndDay;
- var isSelectedBegin = selectBegin.isSame(d, 'day');
- var isSelectedEnd = selectEnd.isSame(d, 'day');
- var isSelected = (!!selectBegin.isBefore(d, 'day') && !!selectEnd.isAfter(d, 'day')) ||
- isSelectedBegin ||
- isSelectedEnd;
- var inThisMonth = d.month() === cellsMonth.month();
- var time = d.toDate().getTime();
- var topLabel = isToday ? localeText.today : '';
- if (Array.isArray(value)) {
- if (isSelectedBegin) {
- if (isSelectedEnd && value.length === 2) {
- topLabel = localeText.startAndEnd;
- }
- else {
- topLabel = localeText.start;
- }
- }
- else {
- if (isSelectedEnd) {
- topLabel = localeText.end;
- }
- }
- }
- return {
- disabled: false,
- time: time,
- date: d.get('date'),
- isSelected: isSelected,
- isSelectedBegin: isSelectedBegin,
- top: { label: topLabel },
- isSelectedEnd: isSelectedEnd,
- inThisMonth: inThisMonth,
- isRowBegin: isRowBegin,
- isRowEnd: isRowEnd,
- };
- });
- }
- export function getSelectionModeFromValue(value) {
- if (Array.isArray(value)) {
- return 'range';
- }
- if (typeof value === 'number') {
- return 'single';
- }
- return null;
- }
- // 获取滚动视图的元素id
- export function getScrollIntoViewId(value) {
- // 已选中时间滚动到可视区域内(微信不支持id为数字开头)
- return "id_".concat(value &&
- dayjs(Array.isArray(value) ? value[0] : value)
- .startOf('d')
- .subtract(7, 'd') // 需要定位的地方往前推7天,让已选中时间定位到中间位置
- .toDate()
- .getTime());
- }
|