feature: combined-video player.
This commit is contained in:
@ -207,6 +207,25 @@ function getFormatter(date, utc) {
|
||||
*/
|
||||
export function formatDate(date, formatter) {
|
||||
formatter ??= 'm/d/Y';
|
||||
if (date === '') {
|
||||
return '';
|
||||
}
|
||||
if (isNaN(date)) {
|
||||
let e = /^(\d{4})-(\d{2})-(\d{2})/.exec(date);
|
||||
if (e == null) {
|
||||
e = /^(\d{4})\/(\d{2})\/(\d{2})/.exec(date);
|
||||
}
|
||||
if (e != null) {
|
||||
date = new Date(e[1], parseInt(e[2]) - 1, e[3]);
|
||||
} else {
|
||||
e = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/.exec(date);
|
||||
if (e != null) {
|
||||
date = new Date(e[3], parseInt(e[1]) - 1, e[2]);
|
||||
} else {
|
||||
return date;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (date instanceof Date) {
|
||||
const f = getFormatter(date, false);
|
||||
return formatter.replace(/\\?(.?)/gi, (k, v) => f[k] ? f[k]() : v);
|
||||
@ -224,14 +243,17 @@ export function formatDate(date, formatter) {
|
||||
* 设置显示日期
|
||||
* @param {HTMLElement} element - 要设置显示日期的元素
|
||||
* @param {Date | number | string} val - 日期值,支持格式参见 {@linkcode formatDate}
|
||||
* @param {string} [formatter] - 日期格式化字符串(仅设置显示元素时调用)
|
||||
*/
|
||||
export function setDateValue(element, val) {
|
||||
export function setDateValue(element, val, formatter) {
|
||||
if (element.tagName === 'INPUT') {
|
||||
if (val === '') {
|
||||
element.value = '';
|
||||
} else if (isNaN(val)) {
|
||||
if (/^\d{4}-\d{2}-\d{2}/.test(val)) {
|
||||
element.value = String(val).substring(0, 10);
|
||||
} else if (/^\d{4}\/\d{2}\/\d{2}/.test(val)) {
|
||||
element.value = String(val).replace('/', '-').substring(0, 10);
|
||||
} else {
|
||||
const e = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/.exec(val);
|
||||
if (e != null) {
|
||||
@ -245,7 +267,7 @@ export function setDateValue(element, val) {
|
||||
}
|
||||
} else {
|
||||
if (val instanceof Date) {
|
||||
element.value = toDateValue(val);
|
||||
element.value = toDateValue(val, true);
|
||||
} else {
|
||||
const ticks = Number(val);
|
||||
if (!isNaN(ticks) && ticks > 0) {
|
||||
@ -256,7 +278,7 @@ export function setDateValue(element, val) {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
element.innerText = formatDate(val);
|
||||
element.innerText = formatDate(val, formatter);
|
||||
}
|
||||
}
|
||||
|
||||
@ -270,7 +292,7 @@ export function setDateValue(element, val) {
|
||||
/**
|
||||
* 从日期选择框获取日期值
|
||||
* @param {HTMLInputElement} element - 要获取的日期选择框
|
||||
* @param {DateFormatterCallback} [formatter] - 自定义格式化函数,传入参数为 `Date` 类型
|
||||
* @param {string | DateFormatterCallback} [formatter] - 自定义格式化字符串或函数,传入参数为 `Date` 类型
|
||||
* @returns {string | any} 默认返回日期 `ticks` 的字符串
|
||||
*/
|
||||
export function getDateValue(element, formatter) {
|
||||
@ -280,11 +302,15 @@ export function getDateValue(element, formatter) {
|
||||
if (year < 1900 || year > 9999) {
|
||||
return '';
|
||||
}
|
||||
if (typeof formatter === 'function') {
|
||||
if (formatter != null) {
|
||||
const month = String(date.getUTCMonth() + 1).padStart(2, '0');
|
||||
const day = String(date.getUTCDate()).padStart(2, '0');
|
||||
// 使外部 formatter 不需要再处理 `getUTCDate` 亦或是 `getDate`
|
||||
return formatter(new Date(`${year}-${month}-${day}T00:00:00`));
|
||||
const localDate = new Date(`${year}-${month}-${day}T00:00:00`);
|
||||
if (typeof formatter === 'function') {
|
||||
return formatter(localDate);
|
||||
}
|
||||
return formatDate(localDate, formatter);
|
||||
}
|
||||
return String(date.getTime() * 1e4 + 621355968e9);
|
||||
}
|
||||
|
Reference in New Issue
Block a user