You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
3.4 KiB
JavaScript
145 lines
3.4 KiB
JavaScript
function pluralize(time, label) {
|
|
if (time === 1) {
|
|
return time + label;
|
|
}
|
|
return time + label + "s";
|
|
}
|
|
export function timeAgo(time) {
|
|
const between = Date.now() / 1000 - Number(time);
|
|
if (between < 3600) {
|
|
return pluralize(~~(between / 60), " minute");
|
|
} else if (between < 86400) {
|
|
return pluralize(~~(between / 3600), " hour");
|
|
} else {
|
|
return pluralize(~~(between / 86400), " day");
|
|
}
|
|
}
|
|
|
|
export function parseTime(time, cFormat) {
|
|
if (arguments.length === 0) {
|
|
return null;
|
|
}
|
|
|
|
if ((time + "").length === 10) {
|
|
time = +time * 1000;
|
|
}
|
|
|
|
const format = cFormat || "{y}-{m}-{d} {h}:{i}:{s}";
|
|
let date;
|
|
if (typeof time === "object") {
|
|
date = time;
|
|
} else {
|
|
date = new Date(parseInt(time));
|
|
}
|
|
const formatObj = {
|
|
y: date.getFullYear(),
|
|
m: date.getMonth() + 1,
|
|
d: date.getDate(),
|
|
h: date.getHours(),
|
|
i: date.getMinutes(),
|
|
s: date.getSeconds(),
|
|
a: date.getDay()
|
|
};
|
|
const timeStr = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
|
|
let value = formatObj[key];
|
|
if (key === "a")
|
|
return ["一", "二", "三", "四", "五", "六", "日"][value - 1];
|
|
if (result.length > 0 && value < 10) {
|
|
value = "0" + value;
|
|
}
|
|
return value || 0;
|
|
});
|
|
return timeStr;
|
|
}
|
|
export function rTime(date) {
|
|
var json_date = new Date(date).toJSON();
|
|
return new Date(new Date(json_date) + 8 * 3600 * 1000)
|
|
.toISOString()
|
|
.replace(/T/g, " ")
|
|
.replace(/\.[\d]{3}Z/, "");
|
|
}
|
|
export function formatTime(time, option) {
|
|
time = +time * 1000;
|
|
const d = new Date(time);
|
|
const now = Date.now();
|
|
|
|
const diff = (now - d) / 1000;
|
|
|
|
if (diff < 30) {
|
|
return "刚刚";
|
|
} else if (diff < 3600) {
|
|
// less 1 hour
|
|
return Math.ceil(diff / 60) + "分钟前";
|
|
} else if (diff < 3600 * 24) {
|
|
return Math.ceil(diff / 3600) + "小时前";
|
|
} else if (diff < 3600 * 24 * 2) {
|
|
return "1天前";
|
|
}
|
|
if (option) {
|
|
return parseTime(time, option);
|
|
} else {
|
|
return (
|
|
d.getMonth() +
|
|
1 +
|
|
"月" +
|
|
d.getDate() +
|
|
"日" +
|
|
d.getHours() +
|
|
"时" +
|
|
d.getMinutes() +
|
|
"分"
|
|
);
|
|
}
|
|
}
|
|
|
|
/* 数字 格式化 */
|
|
export function nFormatter(num, digits) {
|
|
const si = [
|
|
{ value: 1e18, symbol: "E" },
|
|
{ value: 1e15, symbol: "P" },
|
|
{ value: 1e12, symbol: "T" },
|
|
{ value: 1e9, symbol: "G" },
|
|
{ value: 1e6, symbol: "M" },
|
|
{ value: 1e3, symbol: "k" }
|
|
];
|
|
for (let i = 0; i < si.length; i++) {
|
|
if (num >= si[i].value) {
|
|
return (
|
|
(num / si[i].value + 0.1)
|
|
.toFixed(digits)
|
|
.replace(/\.0+$|(\.[0-9]*[1-9])0+$/, "$1") + si[i].symbol
|
|
);
|
|
}
|
|
}
|
|
return num.toString();
|
|
}
|
|
|
|
export function html2Text(val) {
|
|
const div = document.createElement("div");
|
|
div.innerHTML = val;
|
|
return div.textContent || div.innerText;
|
|
}
|
|
|
|
export function toThousandslsFilter(num) {
|
|
return (+num || 0)
|
|
.toString()
|
|
.replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ","));
|
|
}
|
|
|
|
/**
|
|
* 格式化文件大小
|
|
* @param value
|
|
* @returns {*}
|
|
*/
|
|
export function renderSize(value) {
|
|
if (!value || value === null || value === "") {
|
|
return "";
|
|
}
|
|
let unitArr = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
|
|
let srcsize = parseFloat(value);
|
|
let index = Math.floor(Math.log(srcsize) / Math.log(1024));
|
|
let size = srcsize / Math.pow(1024, index);
|
|
size = size.toFixed(0); // 保留的小数位数
|
|
return size + unitArr[index];
|
|
}
|