/** * 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, };