import { TimeRange } from "./enum"; export function formatDate(time: any, cFormat: string) { const format = cFormat || "{y}-{m}-{d}"; const date = new Date(time); const formatObj: any = { //年 y: date.getFullYear(), //月 m: date.getMonth() + 1, //日 d: date.getDate(), //小时 h: date.getHours(), //分钟 i: date.getMinutes(), //秒 s: date.getSeconds(), //星期 a: date.getDay(), }; const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => { const value = formatObj[key]; // Note: getDay() returns 0 on Sunday if (key === "a") { //如果key是a,就是星期,格式化成一~日 //例如formatDate(new Date(), '{y}-{m}-{d}-{h}-{i}-{s}-{a}'); //会输出2021-10-29-00-00-00-五 //星期的value会返回0-6,['日', '一', '二', '三', '四', '五', '六'][2]代表周二 return ["日", "一", "二", "三", "四", "五", "六"][value]; } //padStart用于字符串头部补全,2个字符,如果不够前面补0 return value.toString().padStart(2, "0"); }); return time_str; } export function getCurrentMonthStartAndEnd() { let now = new Date(); let currentMonthStart = new Date(now.getFullYear(), now.getMonth(), 1); let currentMonthEnd = new Date(now.getFullYear(), now.getMonth() + 1, 0); return { start: currentMonthStart, end: currentMonthEnd, }; } export function getCurrentYearStartAndEnd() { let now = new Date(); let currentYearStart = new Date(now.getFullYear(), 0, 1); // 0 代表一月 let currentYearEnd = (new Date(now.getFullYear() + 1, 0, 1) as any) - 1; // 下一年的一月一日减一毫秒 return { start: currentYearStart, end: currentYearEnd, }; } export function deleteBaseKey(obj: any) { delete obj.createTime; delete obj.createUserId; delete obj.createUserName; delete obj.updateTime; delete obj.updateUserId; delete obj.updateUserName; return obj; } export function moneyFormat(num: number, decimal = 2, split = ",") { /* parameter: num:格式化目标数字 decimal:保留几位小数,默认2位 split:千分位分隔符,默认为, moneyFormat(123456789.87654321, 2, ',') // 123,456,789.88 */ if (isFinite(num)) { // num是数字 if (num === 0) { // 为0 return num.toFixed(decimal); } else { // 非0 var res = ""; var dotIndex = String(num).indexOf("."); if (dotIndex === -1) { // 整数 if (decimal === 0) { res = String(num).replace(/(\d)(?=(?:\d{3})+$)/g, `$1${split}`); } else { res = String(num).replace(/(\d)(?=(?:\d{3})+$)/g, `$1${split}`) + "." + "0".repeat(decimal); } } else { // 非整数 // js四舍五入 Math.round():正数时4舍5入,负数时5舍6入 // Math.round(1.5) = 2 // Math.round(-1.5) = -1 // Math.round(-1.6) = -2 // 保留decimals位小数 const numStr = String( ( Math.round(num * Math.pow(10, decimal)) / Math.pow(10, decimal) ).toFixed(decimal) ); // 四舍五入,然后固定保留2位小数 const decimals = numStr.slice(dotIndex, dotIndex + decimal + 1); // 截取小数位 res = String(numStr.slice(0, dotIndex)).replace( /(\d)(?=(?:\d{3})+$)/g, `$1${split}` ) + decimals; } return res; } } else { return "--"; } } // 分页内容重置 export function pageListInit() { return { noMoreData: false, total: 0, list: [], pageNum: 1, pageSize: 10, }; } // 过滤掉属性值为null的 export function filterNullUndefined(obj: Object) { return Object.entries(obj).reduce((acc: any, [key, value]) => { if (value !== null && value !== undefined && value !== "") { acc[key] = value; } return acc; }, {}); } export function timeRange(id: number) { const today = new Date(); const yesterday = new Date((today as any) - 24 * 60 * 60 * 1000); let startTime = ""; let endTime = ""; if (id === TimeRange.Today) { startTime = formatDate(today, "{y}-{m}-{d}"); endTime = formatDate(today, "{y}-{m}-{d}"); } else if (id === TimeRange.Yesterday) { startTime = formatDate(yesterday, "{y}-{m}-{d}"); endTime = formatDate(yesterday, "{y}-{m}-{d}"); } else if (id === TimeRange.Month) { startTime = formatDate(getCurrentMonthStartAndEnd().start, "{y}-{m}-{d}"); endTime = formatDate(getCurrentMonthStartAndEnd().end, "{y}-{m}-{d}"); } else if (id === TimeRange.Year) { startTime = formatDate(getCurrentYearStartAndEnd().start, "{y}-{m}-{d}"); endTime = formatDate(getCurrentYearStartAndEnd().end, "{y}-{m}-{d}"); } return { startTime: startTime, endTime: endTime }; } // 格式化金额 export function formatMoney( number: any, decimals?: any, dec_point?: any, thousands_sep?: any, roundtag?: any ) { /* * 参数说明: * number:要格式化的数字 * decimals:保留几位小数 * dec_point:小数点符号 * thousands_sep:千分位符号 * roundtag:舍入参数,默认 "ceil" 向上取,"floor"向下取,"round" 四舍五入 * */ if (!number) { number = 0; } if (!decimals) { decimals = 0; //默认保留2位小数 } if (!dec_point) { dec_point = "."; } if (!thousands_sep) { thousands_sep = ","; } if (!roundtag) { roundtag = "round"; } number = (number + "").replace(/[^0-9+-Ee.]/g, ""); roundtag = roundtag || "ceil"; //"ceil","floor","round" var n = !isFinite(+number) ? 0 : +number, prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), sep = typeof thousands_sep === "undefined" ? "," : thousands_sep, dec = typeof dec_point === "undefined" ? "." : dec_point, s:any = "", toFixedFix = function (n:any, prec:any) { var k = Math.pow(10, prec); return ( "" + parseFloat( (Math as any)[roundtag](parseFloat((n * k).toFixed(prec * 2))).toFixed( prec * 2 ) ) / k ); }; s = (prec ? toFixedFix(n, prec) : "" + Math.round(n)).split("."); var re = /(-?\d+)(\d{3})/; while (re.test(s[0])) { s[0] = s[0].replace(re, "$1" + sep + "$2"); } if ((s[1] || "").length < prec) { s[1] = s[1] || ""; s[1] += new Array(prec - s[1].length + 1).join("0"); } return s.join(dec); } // 判断字符串中有几个. export function countDots(str: any) { return (str.match(/\./g) || []).length; }