@arco-design/web-react
Version:
Arco Design React UI Library.
335 lines (334 loc) • 13.5 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.isValidTimeString = exports.isDayjsArrayChange = exports.isDayjsChange = exports.getSortedDayjsArray = exports.getValueWithTime = exports.getDayjsValue = exports.getTimeFormat = exports.toLocal = exports.toTimezone = exports.getNow = exports.timezoneToOffset = exports.methods = exports.dayjs = void 0;
var dayjs_1 = __importDefault(require("dayjs"));
var customParseFormat_1 = __importDefault(require("dayjs/plugin/customParseFormat"));
var isBetween_1 = __importDefault(require("dayjs/plugin/isBetween"));
var weekOfYear_1 = __importDefault(require("dayjs/plugin/weekOfYear"));
var advancedFormat_1 = __importDefault(require("dayjs/plugin/advancedFormat"));
var weekYear_1 = __importDefault(require("dayjs/plugin/weekYear"));
var quarterOfYear_1 = __importDefault(require("dayjs/plugin/quarterOfYear"));
var utc_1 = __importDefault(require("dayjs/plugin/utc"));
var timezone_1 = __importDefault(require("dayjs/plugin/timezone"));
var is_1 = require("../_util/is");
var isMoment = (0, dayjs_1.default)()._isAMomentObject;
if (isMoment) {
dayjs_1.default.extend = function () { };
}
var overwriteIsDayjs = function (_, Dayjs, dayjs) {
dayjs = function (date, c) {
if ((0, is_1.isDayjs)(date)) {
return date.clone();
}
var cfg = typeof c === 'object' ? c : {};
cfg.date = date;
cfg.args = arguments; // eslint-disable-line prefer-rest-params
return new Dayjs(cfg);
};
var proto = Dayjs.prototype;
var old$Utils = proto.$utils;
proto.$utils = function () {
var newUtils = old$Utils();
newUtils.i = is_1.isDayjs;
return newUtils;
};
dayjs.isDayjs = is_1.isDayjs;
};
dayjs_1.default.extend(overwriteIsDayjs);
dayjs_1.default.extend(customParseFormat_1.default);
dayjs_1.default.extend(isBetween_1.default);
dayjs_1.default.extend(weekOfYear_1.default);
dayjs_1.default.extend(advancedFormat_1.default);
dayjs_1.default.extend(weekYear_1.default);
dayjs_1.default.extend(quarterOfYear_1.default);
dayjs_1.default.extend(utc_1.default);
dayjs_1.default.extend(timezone_1.default);
exports.dayjs = dayjs_1.default;
function startOfWeekTimestamp(date, weekStart) {
// 计算 date 与前一个 weekStart 日期的间隔
var diff = (date.day() - weekStart + 7) % 7;
var startOfWeek = date.clone().startOf('day').subtract(diff, 'day');
return startOfWeek.valueOf();
}
function isSameWeekMoment(date1, date2, weekStart) {
return startOfWeekTimestamp(date1, weekStart) === startOfWeekTimestamp(date2, weekStart);
}
// 兼容 moment
exports.methods = {
add: function (time, value, unit) {
return isMoment ? time.clone().add(value, unit) : time.add(value, unit);
},
subtract: function (time, value, unit) {
return isMoment ? time.clone().subtract(value, unit) : time.subtract(value, unit);
},
startOf: function (time, unit) {
return isMoment ? time.clone().startOf(unit) : time.startOf(unit);
},
endOf: function (time, unit) {
return isMoment ? time.clone().endOf(unit) : time.endOf(unit);
},
set: function (time, unit, value) {
return isMoment ? time.clone().set(unit, value) : time.set(unit, value);
},
isSameWeek: function (date1, date2, weekStart, localeName) {
return isMoment
? isSameWeekMoment(date1, date2, weekStart)
: date1.locale(__assign(__assign({}, exports.dayjs.Ls[localeName]), { weekStart: weekStart })).isSame(date2, 'week');
},
};
// convert timezone to utcOffset
// https://github.com/iamkun/dayjs/blob/dev/src/plugin/timezone/index.js#L3
var typeToPos = {
year: 0,
month: 1,
day: 2,
hour: 3,
minute: 4,
second: 5,
};
// Cache time-zone lookups from Intl.DateTimeFormat,
// as it is a *very* slow method.
var dtfCache = {};
var getDateTimeFormat = function (timezone, timeZoneName) {
var key = timezone + "|" + (timeZoneName || 'short');
var dtf = dtfCache[key];
if (!dtf) {
dtf = new Intl.DateTimeFormat('en-US', {
hour12: false,
timeZone: timezone,
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
});
dtfCache[key] = dtf;
}
return dtf;
};
var makeFormatParts = function (timestamp, timezone) {
var date = new Date(timestamp);
var dtf = getDateTimeFormat(timezone);
return dtf.formatToParts(date);
};
var tzOffset = function (timestamp, timezone) {
var formatResult = makeFormatParts(timestamp, timezone);
var filled = [];
for (var i = 0; i < formatResult.length; i += 1) {
var _a = formatResult[i], type = _a.type, value = _a.value;
var pos = typeToPos[type];
if (pos >= 0) {
filled[pos] = parseInt(value, 10);
}
}
var hour = filled[3];
// Workaround for the same behavior in different node version
// https://github.com/nodejs/node/issues/33027
/* istanbul ignore next */
var fixedHour = hour === 24 ? 0 : hour;
var utcTs = Date.UTC(filled[0], filled[1] - 1, filled[2], fixedHour, filled[4], filled[5], 0);
var asTS = +timestamp;
var over = asTS % 1000;
asTS -= over;
return (utcTs - asTS) / (60 * 1000);
};
// find the right offset a given local time. The o input is our guess, which determines which
// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)
// https://github.com/moment/luxon/blob/master/src/datetime.js#L76
var fixOffset = function (localTS, o0, tz) {
// Our UTC time is just a guess because our offset is just a guess
var utcGuess = localTS - o0 * 60 * 1000;
// Test whether the zone matches the offset for this ts
var o2 = tzOffset(utcGuess, tz);
// If so, offset didn't change and we're done
if (o0 === o2) {
return [utcGuess, o0];
}
// If not, change the ts by the difference in the offset
utcGuess -= (o2 - o0) * 60 * 1000;
// If that gives us the local time we want, we're done
var o3 = tzOffset(utcGuess, tz);
if (o2 === o3) {
return [utcGuess, o2];
}
// If it's different, we're in a hole time.
// The offset has changed, but the we don't adjust the time
return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];
};
function timezoneToOffset(inputTs, timezone) {
// 使用输入时间戳获取初始偏移量猜测
var initialOffset = tzOffset(inputTs, timezone);
return fixOffset(inputTs, initialOffset, timezone)[1];
}
exports.timezoneToOffset = timezoneToOffset;
// get local now time
function getNow(utcOffset, timezone) {
return (0, is_1.isUndefined)(utcOffset) && !timezone ? (0, exports.dayjs)() : toTimezone((0, exports.dayjs)(), utcOffset, timezone);
}
exports.getNow = getNow;
// convert local date to specify timezone date
function toTimezone(time, utcOffset, timezone, local) {
if (!time || ((0, is_1.isUndefined)(utcOffset) && !timezone)) {
return time;
}
var localOffset = -time.toDate().getTimezoneOffset();
var uOffset = (0, is_1.isUndefined)(utcOffset)
? !timezone
? localOffset
: timezoneToOffset(time.valueOf(), timezone)
: utcOffset;
var timezoneOffset = Math.abs(uOffset) <= 16 ? uOffset * 60 : uOffset;
var diffOffset = local ? localOffset - timezoneOffset : timezoneOffset - localOffset;
// 由于内部时区是手动计算,所以看转换后的时间是否经历冬令时和夏令时边界,做下微调,修正拨表的一个小时
var fixOffset = timezone
? timezoneToOffset((0, exports.dayjs)(time).valueOf() + diffOffset * 60 * 1000, timezone)
: uOffset;
var realDiffOffset = diffOffset - (uOffset - fixOffset);
var diff = local || !(0, is_1.isUndefined)(utcOffset) ? diffOffset : realDiffOffset;
return (0, exports.dayjs)((0, exports.dayjs)(time).valueOf() + diff * 60 * 1000);
}
exports.toTimezone = toTimezone;
// convert specify timezone date to local date
function toLocal(time, utcOffset, timezone) {
return toTimezone(time, utcOffset, timezone, true);
}
exports.toLocal = toLocal;
function getTimeFormat(format) {
var units = ['H', 'h', 'm', 's', 'A', 'a'];
var timeFormat = '';
units.some(function (unit) {
if (format.indexOf(unit) !== -1) {
timeFormat = "" + unit + format.split(" " + unit)[1];
return true;
}
return false;
});
return timeFormat || 'HH:mm:ss';
}
exports.getTimeFormat = getTimeFormat;
function getDayjsValue(time, format, utcOffset, timezone) {
if (!time) {
return undefined;
}
var formatValue = function (value, i) {
if ((0, is_1.isDayjs)(value)) {
return (0, exports.dayjs)(value.valueOf());
}
if (typeof value === 'string') {
var dv = (0, exports.dayjs)(value, (0, is_1.isArray)(format) ? format[i] : format);
return dv.isValid() ? dv : (0, exports.dayjs)(value, 'YYYY-MM-DD');
}
return (0, exports.dayjs)(value);
};
// if set a timezone, convert to timezone date
var getRealTime = function (t, i) {
return utcOffset !== undefined || timezone
? toTimezone(formatValue(t, i), utcOffset, timezone)
: formatValue(t, i);
};
if ((0, is_1.isArray)(time)) {
return time.map(function (t, i) { return (t ? getRealTime(t, i) : undefined); });
}
return getRealTime(time, 0);
}
exports.getDayjsValue = getDayjsValue;
function getValueWithTime(date, time) {
var y = date.year();
var m = date.month();
var d = date.date();
if (time) {
var returnTime = time;
returnTime = exports.methods.set(returnTime, 'year', y);
returnTime = exports.methods.set(returnTime, 'month', m);
returnTime = exports.methods.set(returnTime, 'date', d);
return returnTime;
}
return date;
}
exports.getValueWithTime = getValueWithTime;
function getSortedDayjsArray(values, fixedTime) {
if (!values || !values[0] || !values[1]) {
return values;
}
var newValues = __spreadArray([], __read(values), false);
newValues.sort(function (a, b) { return a.valueOf() - b.valueOf(); });
// 排序处理考虑时间
if (fixedTime && values.length === 2) {
newValues[0] = newValues[0]
.set('hour', values[0].get('hour'))
.set('minute', values[0].get('minute'))
.set('second', values[0].get('second'));
newValues[1] = newValues[1]
.set('hour', values[1].get('hour'))
.set('minute', values[1].get('minute'))
.set('second', values[1].get('second'));
}
return newValues;
}
exports.getSortedDayjsArray = getSortedDayjsArray;
function isDayjsChange(prevValue, currentValue) {
if (currentValue === undefined && prevValue === undefined) {
return false;
}
return ((currentValue && !prevValue) ||
(!currentValue && prevValue) ||
(0, exports.dayjs)(currentValue).valueOf() !== (0, exports.dayjs)(prevValue).valueOf());
}
exports.isDayjsChange = isDayjsChange;
function isDayjsArrayChange(prevValue, currentValue) {
if (currentValue === undefined && prevValue === undefined) {
return false;
}
return ((currentValue && !prevValue) ||
(!currentValue && prevValue) ||
((0, is_1.isArray)(currentValue) &&
(0, is_1.isArray)(prevValue) &&
(0, exports.dayjs)(currentValue[0]).valueOf() !== (0, exports.dayjs)(prevValue[0]).valueOf()) ||
(0, exports.dayjs)(currentValue[1]).valueOf() !== (0, exports.dayjs)(prevValue[1]).valueOf());
}
exports.isDayjsArrayChange = isDayjsArrayChange;
function isValidTimeString(str, format, index) {
return (typeof str === 'string' &&
(0, exports.dayjs)(str, format).format((0, is_1.isArray)(format) ? format[index] : format) === str);
}
exports.isValidTimeString = isValidTimeString;