File size: 3,058 Bytes
e1ae2c6 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | /**
* Handlebars格式化助手函数
* 提供日期、文本等格式化功能
*/
/**
* 格式化日期
* @param {Date|string} date 日期对象或日期字符串
* @param {string} format 格式化模式
* @returns {string} 格式化后的日期字符串
* @example {{formatDate date "YYYY-MM-DD"}}
*/
function formatDate(date, format) {
if (!date) return '';
// 将字符串转换为日期对象
const dateObj = typeof date === 'string' ? new Date(date) : date;
if (!(dateObj instanceof Date) || isNaN(dateObj)) {
return '';
}
// 获取日期组件
const year = dateObj.getFullYear();
const month = dateObj.getMonth() + 1;
const day = dateObj.getDate();
const hours = dateObj.getHours();
const minutes = dateObj.getMinutes();
const seconds = dateObj.getSeconds();
// 格式化日期字符串
if (!format) format = 'YYYY-MM-DD';
return format
.replace('YYYY', year)
.replace('MM', month.toString().padStart(2, '0'))
.replace('DD', day.toString().padStart(2, '0'))
.replace('HH', hours.toString().padStart(2, '0'))
.replace('mm', minutes.toString().padStart(2, '0'))
.replace('ss', seconds.toString().padStart(2, '0'));
}
/**
* 限制文本长度,超出部分显示省略号
* @param {string} text 输入文本
* @param {number} length 最大长度
* @returns {string} 处理后的文本
* @example {{limit description 100}}
*/
function limit(text, length) {
if (!text) return '';
text = String(text);
if (text.length <= length) {
return text;
}
return text.substring(0, length) + '...';
}
/**
* 转换文本为小写
* @param {string} text 输入文本
* @returns {string} 小写文本
* @example {{toLowerCase title}}
*/
function toLowerCase(text) {
if (!text) return '';
return String(text).toLowerCase();
}
/**
* 转换文本为大写
* @param {string} text 输入文本
* @returns {string} 大写文本
* @example {{toUpperCase code}}
*/
function toUpperCase(text) {
if (!text) return '';
return String(text).toUpperCase();
}
/**
* 将对象转换为JSON字符串(用于调试)
* @param {any} obj 要转换的对象
* @returns {string} JSON字符串
* @example {{json this}}
*/
function json(obj) {
return JSON.stringify(obj, null, 2);
}
/**
* 从URL中提取干净的域名
* @param {string} url 完整URL
* @returns {string} 提取的域名(不包含协议和尾部斜杠)
* @example {{extractDomain "https://app.follow.is/"}} => "app.follow.is"
*/
function extractDomain(url) {
if (!url) return '';
try {
// 移除协议部分 (http://, https://, etc.)
let domain = String(url).replace(/^[a-zA-Z]+:\/\//, '');
// 移除路径、查询参数和锚点
domain = domain.split('/')[0].split('?')[0].split('#')[0];
// 移除端口号(如果有)
domain = domain.split(':')[0];
return domain;
} catch (e) {
return String(url);
}
}
// 导出所有格式化助手函数
module.exports = {
formatDate,
limit,
toLowerCase,
toUpperCase,
json,
extractDomain,
};
|