JavaScript 实用函数库 - 时间处理、字符串操作和状态判断
JavaScript 实用函数库
该库提供了一系列 JavaScript 函数,用于时间处理、字符串操作和状态判断。
函数列表
| 函数名称 | 函数描述 | 参数 | 返回值 |
|---|---|---|---|
| maskString | 将字符串中的中间字段隐藏 | str: 待处理的字符串, start: 开始隐藏的位置,从0开始计数, end: 结束隐藏的位置,从0开始计数, mask: 用于替换隐藏字段的字符,默认为'*' | 处理后的字符串 |
| formatTimestamp | 将时间戳格式化为指定格式的字符串 | timestamp: 要格式化的时间戳, format: 格式字符串,默认为'YYYY-MM-DD HH:mm:ss' | 格式化后的字符串 |
| fromNow | 计算距离当前时间的时间差 | timestamp: 要计算的时间戳 | 时间差字符串 |
| getActivityStatus | 判断当前时间是否在活动的开始时间、结束时间之间 | startTime: 活动开始时间, endTime: 活动结束时间 | 当前时间所处的状态,可能取值为'未开始'、'进行中'或'已结束' |
代码示例
/**
* 将字符串中的中间字段隐藏
* @param {string} str - 要处理的字符串
* @param {number} start - 开始隐藏的位置,从0开始计数
* @param {number} end - 结束隐藏的位置,从0开始计数
* @param {string} [mask='*'] - 用于替换隐藏字段的字符,默认为'*'
* @returns {string} - 处理后的字符串
*/
export function maskString(str, start, end, mask = '*') {
// 如果start、end不是数字或者小于0,则直接返回原字符串
if (typeof start !== 'number' || typeof end !== 'number' || start < 0 || end < 0) {
return str;
}
// 如果start大于等于end,则直接返回原字符串
if (start >= end) {
return str;
}
// 如果end大于等于str.length,则将end设置为str.length-1
if (end >= str.length) {
end = str.length - 1;
}
// 使用slice方法将str分成三段,并在第二段中使用repeat和substr方法生成遮罩字符串
const firstPart = str.slice(0, start);
const maskPart = mask.repeat(end - start + 1);
const lastPart = str.substr(end + 1);
return `${firstPart}${maskPart}${lastPart}`;
}
/**
* 将时间戳格式化为指定格式的字符串
* @param {number} timestamp - 要格式化的时间戳
* @param {string} [format='YYYY-MM-DD HH:mm:ss'] - 格式字符串,默认为'YYYY-MM-DD HH:mm:ss'
* @returns {string} - 格式化后的字符串
*/
export function formatTimestamp(timestamp, format = 'YYYY-MM-DD HH:mm:ss') {
// 如果timestamp不是数字,则返回空字符串
if (typeof timestamp !== 'number') {
return '';
}
// 创建Date对象,并从中获取各项时间值
const date = new Date(timestamp);
const year = date.getFullYear();
const month = date.getMonth() + 1;
const day = date.getDate();
const hour = date.getHours();
const minute = date.getMinutes();
const second = date.getSeconds();
// 定义替换字符表达式,用于将格式字符串中的占位符替换为相应的时间值
const replacementTable = {
'YYYY': year.toString(),
'MM': padZero(month),
'DD': padZero(day),
'HH': padZero(hour),
'mm': padZero(minute),
'ss': padZero(second),
};
// 使用正则表达式替换占位符
let result = format;
for (const key in replacementTable) {
const pattern = new RegExp(key, 'g');
result = result.replace(pattern, replacementTable[key]);
}
return result;
}
/**
* 在数字前补零
* @param {number} number - 要补零的数字
* @returns {string} - 补零后的字符串
*/
function padZero(number) {
return number.toString().padStart(2, '0');
}
/**
* 计算距离当前时间的时间差
* @param {number} timestamp - 要计算的时间戳
* @returns {string} - 时间差字符串
*/
export function fromNow(timestamp) {
// 如果timestamp不是数字,则返回空字符串
if (typeof timestamp !== 'number') {
return '';
}
// 计算时间差(单位为毫秒)
const diff = Date.now() - timestamp;
// 根据时间差的大小,选择合适的单位和数量
if (diff < 60000) { // 不足1分钟
return '刚刚';
} else if (diff < 3600000) { // 不足1小时
const minutes = Math.floor(diff / 60000);
return `${minutes}分钟前`;
} else if (diff < 86400000) { // 不足1天
const hours = Math.floor(diff / 3600000);
return `${hours}小时前`;
} else if (diff < 2592000000) { // 不足1个月
const days = Math.floor(diff / 86400000);
return `${days}天前`;
} else if (diff < 31536000000) { // 不足1年
const months = Math.floor(diff / 2592000000);
return `${months}个月前`;
} else { // 大于等于1年
const years = Math.floor(diff / 31536000000);
return `${years}年前`;
}
}
/**
* 判断当前时间是否在活动的开始时间、结束时间之间
* @param {Date} startTime - 活动开始时间
* @param {Date} endTime - 活动结束时间
* @returns {string} - 当前时间所处的状态,可能取值为'未开始'、'进行中'或'已结束'
*/
export function getActivityStatus(startTime, endTime) {
// 如果startTime或endTime不是Date对象,则返回空字符串
if (!(startTime instanceof Date) || !(endTime instanceof Date)) {
return '';
}
const now = new Date();
if (now < startTime) { // 当前时间在开始时间之前
return '未开始';
} else if (now > endTime) { // 当前时间在结束时间之后
return '已结束';
} else { // 当前时间在开始时间和结束时间之间
return '进行中';
}
}
使用方法
import { maskString, formatTimestamp, fromNow, getActivityStatus } from './utils';
// 隐藏字符串中间部分
const maskedString = maskString('1234567890', 3, 7);
console.log(maskedString); // 输出:123***890
// 格式化时间戳
const formattedTimestamp = formatTimestamp(1678940800000, 'YYYY-MM-DD HH:mm:ss');
console.log(formattedTimestamp); // 输出:2023-03-15 16:00:00
// 计算时间差
const timeDifference = fromNow(1678940800000);
console.log(timeDifference); // 输出:X小时前(根据当前时间计算)
// 获取活动状态
const startTime = new Date('2023-03-15T16:00:00.000Z');
const endTime = new Date('2023-03-16T16:00:00.000Z');
const activityStatus = getActivityStatus(startTime, endTime);
console.log(activityStatus); // 输出:进行中/已结束/未开始(根据当前时间计算)
原文地址: https://www.cveoy.top/t/topic/lLgY 著作权归作者所有。请勿转载和采集!