UNPKG

shineout

Version:

Shein 前端组件库

471 lines (369 loc) 14.3 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = exports.compatibleFmt = void 0; var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread")); var _dayjs = _interopRequireDefault(require("dayjs")); var _zonedTimeToUtc = _interopRequireDefault(require("date-fns-tz/zonedTimeToUtc")); var _utcToZonedTime = _interopRequireDefault(require("date-fns-tz/utcToZonedTime")); var _advancedFormat = _interopRequireDefault(require("dayjs/plugin/advancedFormat")); var _quarterOfYear = _interopRequireDefault(require("dayjs/plugin/quarterOfYear")); var _isoWeek = _interopRequireDefault(require("dayjs/plugin/isoWeek")); var _weekday = _interopRequireDefault(require("dayjs/plugin/weekday")); var _weekYear = _interopRequireDefault(require("dayjs/plugin/weekYear")); var _weekOfYear = _interopRequireDefault(require("dayjs/plugin/weekOfYear")); var _customParseFormat = _interopRequireDefault(require("dayjs/plugin/customParseFormat")); var _relativeTime = _interopRequireDefault(require("dayjs/plugin/relativeTime")); var _en = _interopRequireDefault(require("dayjs/locale/en")); var en2Locate = (0, _objectSpread2.default)({}, _en.default, { name: 'en2', weekStart: 1 }); _dayjs.default.locale(en2Locate, undefined, true); _dayjs.default.extend(_advancedFormat.default); _dayjs.default.extend(_isoWeek.default); _dayjs.default.extend(_relativeTime.default); _dayjs.default.extend(_weekday.default); _dayjs.default.extend(_weekOfYear.default); _dayjs.default.extend(_weekYear.default); _dayjs.default.extend(_customParseFormat.default); _dayjs.default.extend(_quarterOfYear.default); var TIME_FORMAT = 'HH:mm:ss'; var compatibleFmt = function compatibleFmt(fmt) { if (typeof fmt !== 'string') return fmt; var trans = { yy: 'YY', d: 'D', a: 'A', t: 'X', T: 'x', RRRR: 'GGGG', I: 'W' }; var result = fmt; Object.keys(trans).forEach(function (key) { result = result.replace(new RegExp(key, 'g'), trans[key]); }); if (result !== fmt) { console.warn("invalid datepicker format: " + fmt + " please use " + result); } return result; }; exports.compatibleFmt = compatibleFmt; function getDayJsLocate(options) { if (options && options.weekStartsOn === 1) return 'en2'; return 'en'; } function transDateWithZone(dd, options, back) { if (options === void 0) { options = {}; } if (back === void 0) { back = false; } if (options.timeZone) { var timezoneHH = /^([+-]\d{2})$/; // 只放开两位时区 if (timezoneHH.test(options.timeZone)) { var num = +options.timeZone; if (num <= 13 && num >= -12) { return back ? (0, _zonedTimeToUtc.default)(dd, options.timeZone) : (0, _utcToZonedTime.default)(dd, options.timeZone); } } console.error(new Error("timeZone is not supported: " + options.timeZone)); } return new Date(dd); } function addDays(date, offset, options) { var zd = transDateWithZone(date, options); var d = (0, _dayjs.default)(zd).add(offset, 'day').toDate(); var ud = transDateWithZone(d, options, true); return ud; } function addMonths(date, offset, options) { var zd = transDateWithZone(date, options); var d = (0, _dayjs.default)(zd).add(offset, 'month').toDate(); var ud = transDateWithZone(d, options, true); return ud; } function addSeconds(date, offset, options) { var zd = transDateWithZone(date, options); var d = (0, _dayjs.default)(zd).add(offset, 'seconds').toDate(); var ud = transDateWithZone(d, options, true); return ud; } function addYears(date, offset, options) { var zd = transDateWithZone(date, options); var d = (0, _dayjs.default)(zd).add(offset, 'year').toDate(); var ud = transDateWithZone(d, options, true); return ud; } function changeDate(date, type, num, options) { var zd = transDateWithZone(date, options); // type is year month ... var d = (0, _dayjs.default)(zd)[type](num).toDate(); var ud = transDateWithZone(d, options, true); return ud; } function getDateInfo(date, type, options) { var zd = transDateWithZone(date, options); return (0, _dayjs.default)(zd)[type](); } function compareAsc(dateA, dateB) { if (!dateA || !dateB) return NaN; var a = (0, _dayjs.default)(dateA).valueOf(); var b = (0, _dayjs.default)(dateB).valueOf(); if (!a || !b) return NaN; if (a === b) return 0; return a > b ? 1 : -1; } function format(date, fmt, options) { if (options === void 0) { options = {}; } if (!date) return 'Invalid Date'; var fmt2 = compatibleFmt(fmt); var zd = date; if (fmt2 !== 'X' && fmt2 !== 'x') { zd = transDateWithZone(date, options); } var dd = (0, _dayjs.default)(zd).locale(getDayJsLocate(options)); var result = dd.format(fmt2); return result; } function isSameMonth(date1, date2, options) { if (options === void 0) { options = {}; } return date1 && date2 && format(date1, 'YYYY-MM', options) === format(date2, 'YYYY-MM', options); } function isSameDay(date1, date2, options) { return date1 && date2 && format(date1, 'YYYY-MM-DD', options) === format(date2, 'YYYY-MM-DD', options); } function isSameWeek(date1, date2, options) { if (!date1 || !date2) return false; return date1 && date2 && format(date1, 'gggg-ww', options) === format(date2, 'gggg-ww', options); } function isSameQuarter(date1, date2, options) { if (!date1 || !date2) return false; return date1 && date2 && format(date1, 'YYYY Q', options) === format(date2, 'YYYY Q', options); } function isValid(date) { if (!date) return false; if (!(date instanceof Date)) return false; return (0, _dayjs.default)(date).isValid(); } function parse(d, fmt, options) { if (!d) return new Date(''); // should clear[xxx] var reg = /[[]([^[^\]]+?)[\]]/g; var date = d && typeof d === 'string' && d.replace ? d.replace(reg, ' ') : d; var fmt2 = compatibleFmt(fmt).replace(reg, ' '); // handle IOS Year Week var index = fmt2.indexOf('GGGG'); if (index >= 0 && typeof date === 'string') { var year = date.slice(index, index + 5); var weekIndex = fmt2.indexOf('WW'); var week = weekIndex >= 0 ? date.slice(weekIndex, weekIndex + 3) : 1; var _result = (0, _dayjs.default)(year + "-06-15", 'YYYY-MM-DD').locale(getDayJsLocate(options)).isoWeek(Number(week)).toDate(); return transDateWithZone(_result, options, true); } // handle Quarter var quarterIndex = fmt2.indexOf('Q'); if (quarterIndex >= 0 && typeof date === 'string') { var quarter = date.slice(quarterIndex, quarterIndex + 2); var _result2 = (0, _dayjs.default)(date, fmt2).locale(getDayJsLocate(options)).quarter(Number(quarter)).toDate(); return transDateWithZone(_result2, options, true); } // dayjs parse stamp with timeZone have bug if (fmt2 === 'x' || fmt2 === 'X') { var stamp = +date; if (fmt2 === 'X') stamp *= 1000; return new Date(stamp); } var result = (0, _dayjs.default)(date, fmt2, getDayJsLocate(options)).toDate(); return transDateWithZone(result, options, true); } function toDate(day, options) { if (!day) return new Date(''); if (day instanceof Date) return (0, _dayjs.default)(day).toDate(); if (typeof day === 'number') return new Date(day); if (typeof day === 'string') return transDateWithZone((0, _dayjs.default)(day).toDate(), options, true); return (0, _dayjs.default)(day).toDate(); } function getDaysOfMonth(dirtyDate, options) { var date = toDate(dirtyDate, options); var temp = (0, _dayjs.default)(transDateWithZone(date, options)); var current = (0, _dayjs.default)(transDateWithZone(date, options)).locale(getDayJsLocate(options)).startOf('month').startOf('week').hour(temp.hour()).minute(temp.minute()).second(temp.second()).millisecond(temp.millisecond()); var days = []; var index = 0; while (index < 42) { days.push(transDateWithZone(current.toDate(), options, true)); current = current.add(1, 'day'); index += 1; } return days; } function isInvalid(date) { // eslint-disable-next-line return isNaN(date); } // function toDateWithFormat(dirtyDate: Date, fmt: string, def: DateTimeType, options: DateOptions): Date // function toDateWithFormat(dirtyDate: DateTimeType, fmt: string, def: DateTimeType, options: DateOptions): DateTimeType function toDateWithFormat(dirtyDate, fmt, def, options) { var date; if (typeof dirtyDate === 'string') { date = parse(dirtyDate, fmt, options); var str = format(date, fmt, options); if (str !== dirtyDate) { date = toDate(dirtyDate, options); } } else date = toDate(dirtyDate, options); if (isInvalid(date)) date = def; return date; } function compareDay(dateLeft, dateRight, pad, options) { if (pad === void 0) { pad = 0; } if (!dateLeft || !dateRight) return NaN; var left = (0, _dayjs.default)(transDateWithZone(dateLeft, options)).startOf('date').toDate(); var right = (0, _dayjs.default)(transDateWithZone(dateRight, options)).startOf('date').add(pad, 'day').toDate(); return compareAsc(left, right); } function compareMonth(dateLeft, dateRight, pad, options) { if (pad === void 0) { pad = 0; } if (!dateLeft || !dateRight) return 0; var left = (0, _dayjs.default)(transDateWithZone(dateLeft, options)).startOf('month').toDate(); var right = (0, _dayjs.default)(transDateWithZone(dateRight, options)).startOf('month').add(pad, 'month').toDate(); return compareAsc(left, right); } function compareWeek(dateLeft, dateRight, pad, options) { if (pad === void 0) { pad = 0; } if (!dateLeft || !dateRight) return 0; var left = (0, _dayjs.default)(transDateWithZone(dateLeft, options)).startOf('isoWeek').toDate(); var right = (0, _dayjs.default)(transDateWithZone(dateRight, options)).startOf('isoWeek').add(pad, 'week').toDate(); return compareAsc(left, right); } function compareYear(dateLeft, dateRight, pad, options) { if (pad === void 0) { pad = 0; } if (!dateLeft || !dateRight) return 0; var left = (0, _dayjs.default)(transDateWithZone(dateLeft, options)).startOf('year').toDate(); var right = (0, _dayjs.default)(transDateWithZone(dateRight, options)).startOf('year').add(pad, 'year').toDate(); return compareAsc(left, right); } function compareQuarter(dateLeft, dateRight, pad, options) { if (pad === void 0) { pad = 0; } if (!dateLeft || !dateRight) return 0; var left = (0, _dayjs.default)(transDateWithZone(dateLeft, options)).startOf('quarter').toDate(); var right = (0, _dayjs.default)(transDateWithZone(dateRight, options)).startOf('quarter').add(pad, 'quarter').toDate(); return compareAsc(left, right); } function newDate(defaultDate, options) { var date = defaultDate ? toDate(defaultDate, options) : new Date(); var zd = transDateWithZone(date, options); var dd = (0, _dayjs.default)(zd).startOf('date').toDate(); var ud = transDateWithZone(dd, options, true); return ud; } function setTime(date, old, options) { var zd = transDateWithZone(date, options); var oldZd = transDateWithZone(old, options); zd.setHours(oldZd.getHours()); zd.setMinutes(oldZd.getMinutes()); zd.setSeconds(oldZd.getSeconds()); zd.setMilliseconds(oldZd.getMilliseconds()); var ud = transDateWithZone(zd, options, true); return ud; } function cloneTime(date, old, fmt, options) { if (!date) return date; var oldDate = toDateWithFormat(old, fmt, undefined, options); if (isInvalid(oldDate)) return date; return setTime(date, oldDate, options); } function formatDateWithDefaultTime(date, value, defaultTime, fmt, options) { if (!date) return date; if (value) return setTime(date, value, options); if (!defaultTime) return date; var dateHMS = toDateWithFormat(defaultTime, TIME_FORMAT, undefined, options); if (isInvalid(dateHMS)) return date; var nDate = cloneTime(date, defaultTime, TIME_FORMAT, options); return format(nDate, fmt, options); } function clearHMS(date, options) { if (!isValid(date)) return date; var zd = transDateWithZone(date, options); var dd = (0, _dayjs.default)(zd).startOf('date').toDate(); var ud = transDateWithZone(dd, options, true); return ud; } function compareDateArray(arr1, arr2, type, options) { if (type === void 0) { type = 'date'; } if (!arr1 || !arr2 || arr1.length !== arr2.length) return false; return arr1.every(function (v, i) { if (!v || !arr2[i]) return false; if (type === 'week') return format(v, 'GGGG WW', options) === format(arr2[i], 'GGGG WW', options); return v.getTime() === arr2[i].getTime(); }); } function getFormat(fo) { var defaultFormat = 'YYYY-MM-DD HH:mm:ss.SSS'; ['H', 'm', 's', 'S', 'h'].map(function (v) { if (fo.indexOf(v) <= -1) { var reg = new RegExp("" + v, 'g'); defaultFormat = defaultFormat.replace(reg, '0'); } return v; }); return defaultFormat; } function resetTimeByFormat(value, fo, options) { if (!value) return null; var date = toDate(value, options); return toDate(format(date, getFormat(fo), options), options); } function formatted(date, fmt, options) { var offsetDate = transDateWithZone(date, options); if (typeof fmt === 'function') return fmt(date, offsetDate); return format(date, fmt, options); } var _default = { clearHMS: clearHMS, addDays: addDays, addMonths: addMonths, addYears: addYears, addSeconds: addSeconds, cloneTime: cloneTime, compareAsc: compareAsc, compareMonth: compareMonth, compareWeek: compareWeek, compareDay: compareDay, compareQuarter: compareQuarter, getDaysOfMonth: getDaysOfMonth, format: formatted, isInvalid: isInvalid, isSameDay: isSameDay, isSameMonth: isSameMonth, isSameWeek: isSameWeek, isSameQuarter: isSameQuarter, isValid: isValid, newDate: newDate, setTime: setTime, parse: parse, toDate: toDate, toDateWithFormat: toDateWithFormat, formatDateWithDefaultTime: formatDateWithDefaultTime, compareDateArray: compareDateArray, compareYear: compareYear, TIME_FORMAT: TIME_FORMAT, resetTimeByFormat: resetTimeByFormat, changeDate: changeDate, getDateInfo: getDateInfo, compatibleFmt: compatibleFmt, transDateWithZone: transDateWithZone }; exports.default = _default;