307 lines
8.4 KiB
JavaScript
307 lines
8.4 KiB
JavaScript
|
||
export function formatDateTime(date) {
|
||
var y = date.getFullYear();
|
||
var m = date.getMonth() + 1;
|
||
m = m < 10 ? ('0' + m) : m;
|
||
var d = date.getDate();
|
||
d = d < 10 ? ('0' + d) : d;
|
||
return y + '-' + m + '-' + d;
|
||
}
|
||
export function parseTime(time, cFormat) {
|
||
if (arguments.length === 0) {
|
||
return null
|
||
}
|
||
const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
|
||
let date
|
||
if (typeof time === 'object') {
|
||
date = time
|
||
} else {
|
||
if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
|
||
time = parseInt(time)
|
||
}
|
||
if ((typeof time === 'number') && (time.toString().length === 10)) {
|
||
time = time * 1000
|
||
}
|
||
date = new Date(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 time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
|
||
let value = formatObj[key]
|
||
// Note: getDay() returns 0 on Sunday
|
||
if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value ] }
|
||
if (result.length > 0 && value < 10) {
|
||
value = '0' + value
|
||
}
|
||
return value || 0
|
||
})
|
||
return time_str
|
||
}
|
||
//时间戳转时间,精确到年月日时分秒
|
||
export function getTimeToDate(time) {
|
||
if(time){
|
||
var date = new Date(time);
|
||
var y = date.getFullYear();
|
||
var m = toNum2(date.getMonth() + 1);
|
||
var d = toNum2(date.getDate());
|
||
var h = toNum2(date.getHours());
|
||
var mm = toNum2(date.getMinutes());
|
||
var s = toNum2(date.getSeconds());
|
||
let currentdate=y + '-' + m + '-' + d+' '+h+':'+mm+':'+s;
|
||
return currentdate;
|
||
}else{
|
||
return ""
|
||
}
|
||
|
||
|
||
|
||
}
|
||
|
||
//月日时分秒不足两位数时,加0
|
||
export function toNum2(num){
|
||
if(num.toString().length<2){
|
||
return '0'+num
|
||
}else{
|
||
return num
|
||
}
|
||
}
|
||
export function getCurrentDate() {
|
||
let date = new Date();
|
||
let y = date.getFullYear();
|
||
let MM = date.getMonth() + 1;
|
||
MM = MM < 10 ? ('0' + MM) : MM;
|
||
let d = date.getDate();
|
||
d = d < 10 ? ('0' + d) : d;
|
||
let h = date.getHours();
|
||
h = h < 10 ? ('0' + h) : h;
|
||
let m = date.getMinutes();
|
||
m = m < 10 ? ('0' + m) : m;
|
||
let s = date.getSeconds();
|
||
s = s < 10 ? ('0' + s) : s;
|
||
return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s;
|
||
}
|
||
|
||
/**
|
||
* 获取树形结构数据
|
||
*/
|
||
export function getTree(tree) {
|
||
|
||
let arr = [];
|
||
if (!!tree && tree.length !== 0) {
|
||
tree.forEach(item => {
|
||
let obj = {};
|
||
obj.id = parseInt(item.id);
|
||
obj.name = item.text;
|
||
if (item.routePath) {
|
||
obj.path = item.routePath;
|
||
}
|
||
if(item.url){
|
||
obj.url = item.url;
|
||
}
|
||
|
||
if (item.type === '0') {
|
||
obj.hidden = false;
|
||
} else if (item.type === '1') {
|
||
obj.hidden = false;
|
||
} else if (item.type === '2') {
|
||
obj.hidden = true;
|
||
} else if (item.type === '3') {
|
||
obj.hidden = true;
|
||
}
|
||
if (item.icon) {
|
||
if (item.icon.substr(0, 2) !== "fa") {
|
||
obj.icon = item.icon.replace(/\s+/g, " ");;
|
||
}
|
||
}
|
||
//obj.icon = "iconfont icon-shebei";
|
||
obj.child = getTree(item.children); // 递归调用
|
||
arr.push(obj);
|
||
});
|
||
}
|
||
return arr;
|
||
}
|
||
|
||
export function getWorkTime(start, end) {
|
||
start = new Date(start);
|
||
end = new Date(end);
|
||
const at = 8.5,
|
||
bt = 1.5,
|
||
ct = 6,
|
||
dt = 16,
|
||
startDate = start.toLocaleDateString(), // 日期
|
||
endDate = end.toLocaleDateString();
|
||
let res = (end - start) / 1000 / 3600;
|
||
|
||
// 同一天
|
||
if (startDate === endDate) {
|
||
if (start.getHours() < 12 && end.getHours() > 12) {
|
||
res = res - bt;
|
||
}
|
||
}
|
||
else {
|
||
// 相差一天
|
||
res = res - at - ct;
|
||
if (start.getHours() < 12) {
|
||
res = res - bt;
|
||
}
|
||
if (end.getHours() > 12) {
|
||
res = res - bt;
|
||
}
|
||
// 超过一天
|
||
const cDate = (new Date(endDate) - new Date(startDate)) / 3600 / 24 / 1000;
|
||
if (cDate > 1) {
|
||
res = res - dt * (cDate - 1);
|
||
}
|
||
|
||
}
|
||
return res;
|
||
}
|
||
|
||
export function dateDifference(faultDate, completeTime) {
|
||
// let d1 = new Date(faultDate);
|
||
// let d2 = new Date(completeTime);
|
||
var stime = new Date(faultDate).getTime();
|
||
var etime = new Date(completeTime).getTime();
|
||
var usedTime = etime - stime; //两个时间戳相差的毫秒数
|
||
var days = Math.floor(usedTime / (24 * 3600 * 1000));
|
||
// //计算出小时数
|
||
var leave1 = usedTime % (24 * 3600 * 1000); //计算天数后剩余的毫秒数
|
||
var hours = Math.floor(leave1 / (3600 * 1000));
|
||
// //计算相差分钟数
|
||
// var leave2=leave1%(3600*1000); //计算小时数后剩余的毫秒数
|
||
// var minutes=Math.floor(leave2/(60*1000));
|
||
// // var time = days + "天"+hours+"时"+minutes+"分";
|
||
var time = hours;
|
||
return time;
|
||
}
|
||
|
||
//日期转时间戳
|
||
export function dataToTime(faultDate) {
|
||
var time = new Date(faultDate).getTime();//13位时间戳
|
||
return time;
|
||
}
|
||
|
||
//当前时间戳,精确到时分秒
|
||
export function getCurrentTime() {
|
||
var timestamp = (new Date()).getTime();
|
||
return timestamp;
|
||
|
||
}
|
||
//当前时间戳,精确到年月日
|
||
export function getCurrentDateTime() {
|
||
var date = new Date();
|
||
var y = date.getFullYear();
|
||
var m = date.getMonth() + 1;
|
||
var d = date.getDate();
|
||
let currentdate=y + '-' + m + '-' + d;
|
||
var timestamp = (new Date(currentdate)).getTime();
|
||
return timestamp;
|
||
|
||
}
|
||
//正则验证手机号
|
||
export function regularMobile(val){
|
||
var reg=/^1\d{10}$/;//验证手机号
|
||
return reg.test(val)
|
||
}
|
||
//正则验证固定电话
|
||
export function regularTelephone(val){
|
||
var reg=/^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/;
|
||
return reg.test(val)
|
||
}
|
||
//正则验证邮箱
|
||
export function regularEmail(val){
|
||
var reg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;//验证邮箱
|
||
return reg.test(val)
|
||
}
|
||
//正则验证正整数和0
|
||
export function regularPositiveInteger(val){
|
||
var reg=/^([1-9]\d*|[0]{1,1})$/;
|
||
return reg.test(val)
|
||
}
|
||
//验证密码输入规范,6到20位,由数字和字母组成,并且要同时含有数字和字母。
|
||
export function regularPassword(val){
|
||
var reg=/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/
|
||
return reg.test(val)
|
||
}
|
||
//验证用户名输入规范,用户名必须是4到16位(字母,数字,下划线,减号)。
|
||
// export function regularUsername(val){
|
||
// var reg=/^[a-zA-Z]\w{3,15}$/
|
||
// return reg.test(val)
|
||
// }
|
||
|
||
// 验证用户名输入规范,用户名必须是英文和数字
|
||
export function regularUsername(val){
|
||
var reg=/^[0-9a-zA-Z]+$/
|
||
return reg.test(val)
|
||
}
|
||
|
||
/**
|
||
* 存储localStorage
|
||
*/
|
||
export const setStore = (name, content) => {
|
||
if (!name) return;
|
||
if (typeof content !== "string") {
|
||
content = JSON.stringify(content);
|
||
}
|
||
window.localStorage.setItem(name, content);
|
||
};
|
||
|
||
/**
|
||
* 存储可过期的localstorage
|
||
* @param key
|
||
* @param value
|
||
*/
|
||
export function setLocalStorageAndTime (key, value) {
|
||
if (!key) return;
|
||
if (typeof value !== "string") {
|
||
value = JSON.stringify(value);
|
||
}
|
||
window.localStorage.setItem(key, JSON.stringify({ data: value, time: new Date().getTime() }))
|
||
}
|
||
/**
|
||
* 获取localStorage
|
||
*/
|
||
export const getStore = name => {
|
||
if (!name) return;
|
||
return window.localStorage.getItem(name);
|
||
};
|
||
|
||
/**
|
||
* 获取有效期内的数据
|
||
* @param key
|
||
* @param exp
|
||
* @returns {null|*}
|
||
*/
|
||
export function getLocalStorageAndTime (key) {
|
||
// 获取数据
|
||
const exp = 1000*60*60*24*3;//设置过期时间为3天
|
||
let data = window.localStorage.getItem(key)
|
||
if (!data) return null
|
||
let dataObj = JSON.parse(data)
|
||
// 与过期时间比较
|
||
if (new Date().getTime() - dataObj.time > exp) {
|
||
// 过期删除返回null
|
||
removeStore(key)
|
||
console.log('信息已过期')
|
||
return null
|
||
} else {
|
||
return JSON.parse(dataObj.data)
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 删除localStorage
|
||
*/
|
||
export const removeStore = name => {
|
||
if (!name) return;
|
||
window.localStorage.removeItem(name);
|
||
};
|