js 时间转换、json操作、URL参数截取

1,348 阅读4分钟

js常用的一些方法集合

1、时间

/*
 * @Author: 
 * @Date: 2020-10-12 21:49:16
 * @LastEditors: 
 * @LastEditTime: 2020-12-08 13:56:47
 * @FilePath: time.js
 * @Description: 时间
 */
/**
 * 时间戳转年月日
 * 时间戳转中国标准时间,直接 new Date(时间戳);
 */
export function specificDate(time) {
    let date = new Date(time);
    let year = date.getFullYear();
    /* 
    在日期格式中,月份是从0开始的,因此要加0
    使用三元表达式在小于10的前面加0,以达到格式统一
    */
    let month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
    let day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
    // 拼接
    return year + "-" + month + "-" + day;
}

/**
 * @description: yyyy-mm-dd / yyyy-mm 转中国便准时间
 * @param {type} yyyy-mm-dd / yyyy-mm
 * @return {type} 中国便准时间
 */
export function standardTime(date) {
    //let result = new Date(`${date} GMT+0800`);
    let result = return new Date(`${date}`);
    return result;
}
/**
 * @description: 取得当前时间的前一天
 * @param {type} 中国标准时间
 * @return {type} 前一天的时间标准时间
 */
export function frontDate(date) {
    return new Date(date.getTime() - 24 * 60 * 60 * 1000)
}
/**
 * @description: 取得当前时间的后一天
 * @param {type} 中国标准时间
 * @return {type} 后一天的时间标准时间
 */
export function afterDate(date) {
    return new Date(date.getTime() + 24 * 60 * 60 * 1000)
}

/**
 * @description: 根据标准时间  当天时间的 00:00:00 的时间戳
 * @param {type} data为中国标准时间
 * @return {type} 时间戳
 */
export function sameDayStart(date) {
    return new Date(date.toLocaleDateString()).getTime();
}
/**
 * @description: 根据标准时间 取到当天的23:59:59 的时间戳
 * @param {type} data为中国标准时间
 * @return {type} 时间戳
 */
export function sameDayEnd(date) {
    return new Date(date).getTime() + 24 * 60 * 60 * 1000 - 1
}


// 时间戳转普通时间
export function dateFormat(time) {
    let date = new Date(time);
    let year = date.getFullYear();
    /* 在日期格式中,月份是从0开始的,因此要加0
     * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
     */
    let month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
    let day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
    let hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
    let minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
    let seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
    // 拼接
    return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
}

//将日期或时间戳转换为固定格式的字符串
export const dateConvert = (dateTime, pattern) => {
    let dateStr;
    pattern = pattern ? pattern : 'yyyy-MM-dd';
    dateTime = dateTime ? new Date(dateTime) : new Date
    if (typeof dateTime == 'object' || typeof dateTime == 'number') {
        let year = dateTime.getFullYear();
        let month = dateTime.getMonth() + 1 >= 10 ? dateTime.getMonth() + 1 : '0' + (dateTime.getMonth() + 1);
        let day = dateTime.getDate() >= 10 ? dateTime.getDate() : '0' + dateTime.getDate();
        dateStr = year + '-' + month + '-' + day;
    }
    return dateStr;
}

/**
 * @description: 时间的标准格式转年月
 * @param {type} 标准格式
 * @return {type} 年 月
 */
export function YearMoMonth(date) {
    let Year = date.getFullYear(); //获取完整的年份(4位)
    let Month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
    return Year + "-" + Month
}


/**
 * @description:取得dang天的23:59:59 的 标准时间
 *  .toLocaleDateString()  可以把标准时间 转换为 yyyy/mm/dd
 */
export function nowLast() {
    return new Date(new Date(new Date().toLocaleDateString()).getTime() + 24 * 60 * 60 * 1000 - 1);
}
/**
 * @description: 取得当天 00:00:00的标准时间
 */
export function nowStart() {
    return new Date(new Date().toLocaleDateString())
}

/**
 * @description: 获取当权月份的前/后 十二月
 * @param {type} true 后十二个月     false 前十二个月
 * @return {type}  Array
 */
export function twelve(bool = true) {
    var dataArr = [];
    var data = new Date();
    var year = data.getFullYear();
    if (bool) {
        data.setMonth(data.getMonth() - 1, 1) //获取到当前月份,设置月份
    } else {
        data.setMonth(data.getMonth() + 1, 1)//获取到当前月份,设置月份
    }

    for (var i = 0; i < 12; i++) {
        if (bool) {
            data.setMonth(data.getMonth() + 1); //每次循环一次 月份值减1
        } else {
            data.setMonth(data.getMonth() - 1);//每次循环一次 月份值减1
        }
        var m = data.getMonth() + 1;
        m = m < 10 ? "0" + m : m;
        dataArr.push(data.getFullYear() + "-" + (m))
    }
    console.log(dataArr);
}

/**
 * @description: 获取指定月份天数
 * @param 年,月
 * @return 天数
 */
export function getMonthDays(year, month) {
    var date = new Date(year, month, 0)
    return date.getDate()
}

2、操作json字符串

/**
 * @description: 去除json对象中的空对象
 * @param {Object} json对象
 * @return {Object}  
 */
export function deleteEmptyProperty(json) {
    let obj = json
    for (var key in obj) {
        if (obj[key] == "" || obj[key] == null || obj[key] == NaN || obj[key] == []) {
            delete obj[key];
        }
    }
    return obj;
}

/**
 * @description: 合并json对象
 * @param {type} 
 * @return {type} 
 */
export function mergeJsonObject(jsonbject1,jsonbject2) {
    let resultJsonObject = {};
    for (var attr in jsonbject1) {
        resultJsonObject[attr] = jsonbject1[attr];
    }
    for (var attr in jsonbject2) {
        resultJsonObject[attr] = jsonbject2[attr];
    }
    return resultJsonObject;
}

3、获取URL路径后面的参数

/*
 * @Author: 
 * @Date: 2020-10-23 10:18:54
 * @LastEditors: 
 * @LastEditTime: 2020-10-23 11:46:14
 * @FilePath: /we-chat/src/utils/obtainUrlParameter.js
 * @Description: 获取url里面传过来的参数,并且 把他变成  json对象
 * 参看教程:https://www.w3cschool.cn/json/1koy1piy.html
 * 参考博客:https://juejin.cn/post/6844903856556474381
 * 
 * split() 方法用于把一个字符串分割成字符串数组
 */
/**
 * @description: 把url参数 转换为json对象(但是# 后面的 都不会解析 ),所以在 Vue 中 history模式可以使用,但是 hash模式 他会返回一个空
 * @param {type}  路径 || 在页面或者组件里面调用,他会自己取的当前页面路径
 * @return {type}  Object  注:无参数的时候,返回一个json
 */
export function getAllUrlParams(url) {
    // 用JS拿到URL,如果函数接收了URL,那就用函数的参数。如果没传参,就使用当前页面的URL
    var queryString = url ? url.split('?')[1] : window.location.search.slice(1);
    // 用来存储我们所有的参数
    var obj = {};
    // 如果没有传参,返回一个空对象
    if (!queryString) {
        return obj;
    }
    // stuff after # is not part of query string, so get rid of it
    queryString = queryString.split('#')[0];
    // 将参数分成数组
    var arr = queryString.split('&');
    for (var i = 0; i < arr.length; i++) {
        // 分离成key:value的形式
        var a = arr[i].split('=');
        // 将undefined标记为true
        var paramName = a[0];
        var paramValue = typeof(a[1]) === 'undefined' ? true : a[1];
        // 如果调用对象时要求大小写区分,可删除这两行代码
        paramName = paramName.toLowerCase();
        if (typeof paramValue === 'string') paramValue = paramValue.toLowerCase();
        // 如果paramName以方括号结束, e.g. colors[] or colors[2]
        if (paramName.match(/\[(\d+)?\]$/)) {
            // 如果paramName不存在,则创建key
            var key = paramName.replace(/\[(\d+)?\]/, '');
            if (!obj[key]) obj[key] = [];
            // 如果是索引数组 e.g. colors[2]
            if (paramName.match(/\[\d+\]$/)) {
                // 获取索引值并在对应的位置添加值
                var index = /\[(\d+)\]/.exec(paramName)[1];
                obj[key][index] = paramValue;
            } else {
                // 如果是其它的类型,也放到数组中
                obj[key].push(paramValue);
            }
        } else {
            // 处理字符串类型
            if (!obj[paramName]) {
                // 如果如果paramName不存在,则创建对象的属性
                obj[paramName] = paramValue;
            } else if (obj[paramName] && typeof obj[paramName] === 'string') {
                // 如果属性存在,并且是个字符串,那么就转换为数组
                obj[paramName] = [obj[paramName]];
                obj[paramName].push(paramValue);
            } else {
                // 如果是其它的类型,还是往数组里丢
                obj[paramName].push(paramValue);
            }
        }
    }
    return obj;
}

/**
 * @description: 这个所有模式下 都可以使用,他会 取得 ? 号后面的 所有内容
 * @param {type} 路径 || 在页面或者组件里面调用,他会自己取的当前页面路径
 * @return {type} Object  注:无参数的时候,返回一个空json
 */
export function parseQueryString(url) {
    // console.log(url);
    var queryString = url ? url.split('?')[1] : window.location.href;
    var obj = {};
    //这个 去查找是否,传了参数过来
    if (!queryString.indexOf("?")) {
        return obj;
    }
    var keyvalue = [];
    var key = "",
        value = "";
    var paraString = queryString.substring(queryString.indexOf("?") + 1, queryString.length).split("&");
    for (var i in paraString) {
        keyvalue = paraString[i].split("=");
        key = keyvalue[0];
        value = keyvalue[1];
        obj[key] = value;
    }
    return obj;
}