【持续更新】前端JS/TS字符串与日期工具封装

前端JS/TS字符串工具封装

判空

/**
 * @param val
 */
export const isBlank = (val?: string | undefined) => {
    return (val === undefined || (val.trim().length < 1));
};

/**
 * @param val
 */
export const isNotBlank = (val?: string | undefined) => {
    return !isBlank(val);
};

/***
 * isAnyBlank <br>
 * Checks if any of the vals are empty (""), undefined or whitespace only.
 * @param vals
 */
export const isAnyBlank = (vals?: (string | undefined)[]) => {
    if (vals === undefined) return true;
    if (vals.length < 1) return true;
    for (let i = 0; i < vals.length; i++) {
        if (isBlank(vals[i])) return true;
    }
    return false;
};

/***
 * isAllBlank <br>
 * Checks if all of the vals are empty (""), undefined or whitespace only.
 * @param vals
 */
export const isAllBlank = (vals: (string | undefined)[]) => {
    if (vals === undefined) return true;
    if (vals.length < 1) return true;
    for (let i = 0; i < vals.length; i++) {
        if (!isBlank(vals[i])) return false;
    }
    return true;
};

使用:

    console.log(isAnyBlank(["", "a", "A", undefined]));
    console.log(isAnyBlank(abReasons));
    console.log(isAllBlank([" ", "a", "C", undefined]));
    console.log(isAllBlank(abReasons));

比较

两个字符串比较

/**
 * <b>{ undefined === undefined } : true </b>
 * <b>{ undefined === "a" } : false </b>
 * @param val1
 * @param val2
 */
export const equalsTrimmed = (val1?: string | undefined, val2?: string | undefined) => {
    if (val1 === undefined || val2 === undefined) {
        return (val1 === undefined && val2 === undefined);
    }
    let v1 = val1.trim();
    let v2 = val2.trim();
    if (v1.length !== v2.length) return false;
    return v1 === v2;
}
/**
 * equalsIgnoreCaseTrimmed :
 *    <li> <b> undefined === undefined  =>  true <b></li>
 *    <li> <b> " " === ""  =>  true <b></li>
 *    <li> <b> "" === "q"  =>  false <b></li>
 *    <li> <b> "q" === "Q"  =>  true <b></li>
 *    <li> <b> "QQ" === "Q"  =>  fasle <b></li>
 * @param val1
 * @param val2
 */
export const equalsIgnoreCaseTrimmed = (val1?: string | undefined, val2?: string | undefined) => {
    if (val1 === undefined || val2 === undefined) {
        return (val1 === undefined && val2 === undefined);
    }
    let v1 = val1.trim();
    let v2 = val2.trim();
    if (v1.length !== v2.length)
        return false;
    return v1.toUpperCase() === v2.toUpperCase();
}

一个与多个

/**
 * equalsAnyIgnoreCase<br>
 * example:
 *      <li><b> equalsAny("aaa", ["  a", "AAAA  "]) => false </b></li>
 *      <li><b> equalsAny("ccc", ["  a", "AAA  ", "cc", "CCC"]) => true </b></li>
 *      <li><b> equalsAny(undefined, ["  a", "AAA  "]) => false </b></li>
 *      <li><b> equalsAny("ccc", undefined) => false </b></li>
 *      <li><b> equalsAny(undefined, undefined) => false </b></li>
 * @param val
 * @param tVals
 */
export const equalsAnyIgnoreCaseTrimmed = (val?: string | undefined, tVals?: Array<string | undefined>) => {
    return searchElementIgnoreCaseTrimmed(val, tVals) >= 0;
}

/** 
 * equalsAnyIgnoreCase<br>
 * example:
 *      <li><b> equalsAny("aaa", ["  a", "AAAA  "]) => false </b></li>
 *      <li><b> equalsAny("ccc", ["  a", "AAA  ", "cc", "CCC"]) => true </b></li>
 *      <li><b> equalsAny(undefined, ["  a", "AAA  "]) => false </b></li>
 *      <li><b> equalsAny("ccc", undefined) => false </b></li>
 *      <li><b> equalsAny(undefined, undefined) => false </b></li>
 * @param val
 * @param tVals
 */
export const equalsAnyIgnoreCaseTrimmed = (val?: string | undefined, tVals?: Array<string | undefined>) => {
    return searchElementIgnoreCaseTrimmed(val,tVals) >= 0;
}

使用:

    console.log(equalsAnyTrimmed(optionKey,["", "c", "A ", undefined]));
    console.log(equalsAnyIgnoreCaseTrimmed(optionKey,[" ", "A ", "C", undefined]));

查找

/**
 * searchElementTrimmed
 * @param val
 * @param tVals
 */
export const searchElementTrimmed = (val?: string | undefined, tVals?: Array<string | undefined>) => {
    if (val === undefined || val.trim().length < 1)
        return -1;

    if (tVals === undefined || tVals.length < 1)
        return -2;

    for (let i = 0; i < tVals.length; i++) {
        if (equalsTrimmed(tVals[i], val)) {
            return i;
        }
    }
    return -3;
}

/**
 * searchElementIgnoreCaseTrimmed
 * @param val
 * @param tVals
 */
export const searchElementIgnoreCaseTrimmed = (val?: string | undefined, tVals?: Array<string | undefined>) => {
    if (val === undefined || val.trim().length < 1)
        return -1;

    if (tVals === undefined || tVals.length < 1)
        return -2;

    for (let i = 0; i < tVals.length; i++) {
        if (equalsIgnoreCaseTrimmed(tVals[i], val)) {
            return i;
        }
    }
    return -3;
}

前端JS/TS日期工具封装

  • 对项目中用到的工具进行封装,主要涉及的数据类型:
    • Date 类型
    • moment 类型
    • string 类型
  • 主要涉及的需求
    • 零点问题
    • string与Date、moment之间的转换
    • 时间的加减、比较

导包

import {isAnyBlank, isBlank, isNotBlank} from "@/utils/string-utils";
import moment from "moment";

其中:string-utils

构建传入日期的零点

/**
 * buildCurDayZero
 * @param date
 */
export const buildCurDayZero = (date: Date | undefined) => {
  if (date) {
    var t = new Date(date?.getTime());
    t.setHours(0);
    t.setMinutes(0);
    t.setSeconds(0);
    t.setMilliseconds(0);
    return t;
  }
  return undefined;
};

/**
 * buildCurDayZeroStr
 * @param dateStr
 * @param pattern
 */
export const buildCurDayZeroStr = (dateStr: string | undefined, pattern: string) => {
  if (!isAnyBlank([dateStr, pattern])) {
    var t = transStrToDate(dateStr, pattern);
    t?.setHours(0);
    t?.setMinutes(0);
    t?.setSeconds(0);
    t?.setMilliseconds(0);
    return transDateToStr(t,pattern);
  }
  return undefined;
};

构建之后一天的零点


/**
 * buildNextDayZero <br>
 * @param date
 */
export const dateZeroOfNextDay = (date: Date | undefined) => {
  if (date) {
    var t = new Date(86400_000 + date?.getTime());
    t.setHours(0);
    t.setMinutes(0);
    t.setSeconds(0);
    t.setMilliseconds(0);
    return t;
  }
  return undefined;
};

/**
 * buildNextDayZero <br>
 * @param date
 */
export const momentZeroOfNextDay = () => {
    var t = moment().add(1, "days");
    t.setHours(0);
    t.setMinutes(0);
    t.setSeconds(0);
    t.setMilliseconds(0);
    return t; 
};

/**
 * buildNextDayZeroStr
 * @param dateStr
 * @param pattern
 */
export const buildNextDayZeroStr = (dateStr: string | undefined, pattern: string) => {
  if (!isAnyBlank([dateStr, pattern])) {
    return transDateToStr(buildNextDayZero(transStrToDate(dateStr, pattern)), pattern);
  }
  return undefined;
};

加天数

/**
 * plusDays
 * @param date
 * @param days
 */
export const plusDays = (date: Date | undefined, days: number) => {
  if (date) {
    return new Date(86400_000 * days + date?.getTime());
  }
  return undefined;
};

字符串/日期互转

/**
 * transDateToStr
 * @param date
 * @param pattern
 */
export const transDateToStr = (date: Date | undefined, pattern: string | undefined) => {
  if (isBlank(pattern) || !date) {
    return undefined;
  }
  return moment(date).format(pattern);
};

/**
 * transStrToDate
 * @param dateStr
 * @param pattern
 */
export const transStrToDate = (dateStr: string | undefined, pattern: string | undefined) => {
  if (isAnyBlank(dateStr, pattern)) return undefined;
  return moment(dateStr, pattern).toDate();
};

日期比较

  • diff当作compare使用
/**
 * example:<br>
 * <li><b>compareDateStr("2022-02-07", "2022-02-06", "yyyy/MM/DD") ====> 86400000 </b><\li>
 * <li><b>compareDateStr("2022-02-06", "2022-02-07", "yyyy/MM/DD") ====> -86400000 </b><\li>
 * <li><b>compareDateStr("2022-02-06", "2022-02-06", "yyyy/MM/DD") ====> 0 </b><\li>
 *
 * @param dateStr1
 * @param dateStr2
 * @param pattern
 * @return [millisecond]: (dateStr1 - dateStr2)
 *
 * <li> >0: dateStr1 is after dateStr2  <\li>
 * <li> =0: dateStr1 and dateStr2 are same time. <\li>
 * <li> <0: dateStr1 is after dateStr2.  <\li>
 */
export const compareDateStr = (dateStr1: string | undefined, dateStr2: string | undefined, pattern: string) =>{
  if (isAnyBlank([dateStr1, dateStr2, pattern])){
    return undefined;
  }
  var moment1 = moment(dateStr1, pattern);
  return moment1.diff(moment(dateStr2, pattern));
}

构建当月一号零点

/**
 * momentZeroOfCurMonth
 */
export const momentZeroOfCurMonth = () => {
  return moment(dateZeroOfCurMonth());
}
/**
 * dateZeroOfCurMonth
 */
export const dateZeroOfCurMonth = () => {
  var date = new Date();
  date.setDate(1);
  date.setHours(0);
  date.setMinutes(0);
  date.setSeconds(0);
  date.setMilliseconds(0);
  return date;
}

构建下月一号零点

/**
 * momentZeroOfNextMonth
 */
export const momentZeroOfNextMonth = () => {
  return moment(dateZeroOfCurMonth()).add(1, "months");
}
/**
 * dateZeroOfNextMonth
 */
export const dateZeroOfNextMonth = () => {
  var date = moment().add(1, "months").toDate();
  date.setDate(1);
  date.setHours(0);
  date.setMinutes(0);
  date.setSeconds(0);
  date.setMilliseconds(0);
  return date;
}

持续更新…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue3中使用TypeScript进行字符串操作很简单。以下是一些常见的字符串操作的示例: 1. 字符串拼接: 可以使用模板字符串(template string)或者普通的字符串拼接操作符(+)来实现字符串的拼接。 ```typescript const str1: string = "Hello"; const str2: string = "World"; const result1: string = `${str1} ${str2}`; // 使用模板字符串 const result2: string = str1 + " " + str2; // 使用字符串拼接操作符 ``` 2. 字符串长度: 可以使用字符串的length属性来获取字符串的长度。 ```typescript const str: string = "Hello"; const length: number = str.length; console.log(length); // 输出: 5 ``` 3. 字符串截取: 可以使用slice()方法或者substring()方法来截取字符串的一部分。 ```typescript const str: string = "Hello World"; const substr1: string = str.slice(6, 11); // 使用slice()方法 const substr2: string = str.substring(6, 11); // 使用substring()方法 console.log(substr1); // 输出: World console.log(substr2); // 输出: World ``` 4. 字符串转换大小写: 可以使用toLowerCase()方法将字符串转换为小写,使用toUpperCase()方法将字符串转换为大写。 ```typescript const str: string = "Hello World";const lowerCase: string = str.toLowerCase(); // 转换为小写 const upperCase: string = str.toUpperCase(); // 转换为大写 console.log(lowerCase); // 输出: hello world console.log(upperCase); // 输出: HELLO WORLD ``` 5. 字符串查找: 可以使用indexOf()方法或者includes()方法来查找字符串中是否包含某个子字符串。 ```typescript const str: string = "Hello World"; const index: number = str.indexOf("World"); // 使用indexOf()方法 const includes: boolean = str.includes("World"); // 使用includes()方法 console.log(index); // 输出: 6 console.log(includes); // 输出: true ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值