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); // 输出:进行中/已结束/未开始(根据当前时间计算)
JavaScript 实用函数库 - 时间处理、字符串操作和状态判断

原文地址: https://www.cveoy.top/t/topic/lLgY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录