1. 程式人生 > >分享一下常用的工具類ES6封裝

分享一下常用的工具類ES6封裝

分享一下目前專案中用到的工具類,僅供參考,直接引用可能會報錯,用到的第三方外掛需要引入對應的包和模組才行 

/**
 * 公有方法類
 */

import Chinese from '../../../static/js/i18n/zh-cn.js';
import English from '../../../static/js/i18n/en-us.js';
import constant from '../base/constant';
import moment from 'moment';

moment.defineLocale('zh-cn', {
    weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_')
});

//import moment from 'moment'

export default {

    /**
     * 設定cookie
     * @param cname
     * @param cvalue
     * @param expires
     */
    setCookie(cname, cvalue, expires) {
        let exp = new Date();
        exp.setTime(exp.getTime() + 12 * 60 * 60 * 1000);
        document.cookie = cname + '=' + cvalue + ';expires=' + exp.toGMTString();
    },

    /**
     * 清除cookie
     * @param name
     */
    clearCookie: function(name) {
        this.setCookie(name, '', -1);
    },

    /**
     * 獲取系統當前的語言
     * @returns {*}
     */
    getCurrentLanguage() {
        let language = localStorage.getItem('language');
        if (language === 'en') {
            language = 'en_US';
        } else {
            language = 'zh_CN';
        }

        return language || navigator.language;
    },

    /**
     * 切換英文語言包
     * @return {{lang, estacionamento_plataforma, login, logout}}
     */
    toggleLanguage: function() {
        //獲取瀏覽器的語言
        let language = (navigator.language || navigator.browserLanguage).toLowerCase();
        if (window.localStorage) {
            if (localStorage.languages != null && localStorage.languages != undefined) {
                language = JSON.parse(localStorage.languages).value;
            }
        } else {
            this.toggoleLang('Error!');
        }

        if (language === 'zh-cn') {
            return Chinese;
        } else {
            return English;
        }
    },

    /**
     * 獲取cookie
     * @param cname
     * @returns {*}
     */
    getCookie(cname) {
        let cookieArr = document.cookie.split('; ');
        for (let i = 0; i < cookieArr.length; i++) {
            let arr = cookieArr[i].split('=');

            if (arr[0] === cname) {
                return arr[1];
            }
        }
    },

    /**
     * 判斷 中國 行動電話號碼的 正則表示式
     * @param phone
     * @returns {*}
     */
    judgePhone(phone) {
        let pattern = new RegExp(/^((1[3,5,8][0-9])|(14[5,7])|(16[6])|(17[0,6,7,8])|(19[7,8,9]))\d{8}$/);
        let flag = pattern.test(phone);

        if (flag === false) {
            return '+64';
        } else {
            return '+86';
        }
    },

    /**
     * 轉換時間戳
     * @param timestamp
     * @return {string}
     */
    formatDateYearMonthDay(timestamp) {
        if (timestamp) {
            return moment(timestamp * 1000).format(constant.YYYYMMDD);
        }
    },

    /**
     * 轉換時間戳 時分秒
     * @param timestamp
     * @return {string}
     */
    formatDateHourMinSec(timestamp) {
        if (timestamp) {
            return moment(timestamp * 1000).format(constant.HHMMII);
        }
    },

    /**
     * 轉換時間戳 年月日時分秒
     * @param timestamp
     * @return {string}
     */
    formatDateYearMonthDayAndHms(timestamp) {
        if (timestamp) {
            return moment(timestamp * 1000).format(constant.YYYYMMDDHHMMII);
        }
    },

    /**
     * 獲取今天0點時間戳 秒
     * @return {number}
     */
    getTodayTimeStamp() {
        return new Date(new Date().setHours(0, 0, 0, 0)) / 1000;
    },

    /**
     * 獲取當前時間
     * @return {*}
     */
    getThisTime() {
        return this.formatDateYearMonthDayAndHms(new Date(new Date()) / 1000);
    },

    /**
     * 獲取今天 23:59分的時間戳
     * @return {number}
     */
    getTodayTimeEnd() {
        return (new Date(new Date().setHours(0, 0, 0, 0)) / 1000) + (24 * 60 * 60) - 1;
    },

    /**
     * 獲取當前年
     */
    getThisYear() {
        return moment().format('YYYY');
    },

    /**
     * 獲取本月實際 2017 -01
     */
    getThisMonthDate() {
        return moment().format('YYYY-MM');
    },

    /**
     * 獲取今天 2017-01-01
     */
    getTodayDate() {
        return moment().format('YYYY-MM-DD');
    },

    /**
     * 將秒轉換為 天-時-分-秒
     * @param msd {Number} 秒數
     * */
    secondToDate(msd) {
        let time = msd;
        if (time != null && time != '') {
            if (time > 60 && time < 60 * 60) {
                time = parseInt(time / 60.0) + '分鐘' + parseInt((parseFloat(time / 60.0) -
                    parseInt(time / 60.0)) * 60) + '秒';
            } else if (time >= 60 * 60 && time < 60 * 60 * 24) {
                time = parseInt(time / 3600.0) + '小時' + parseInt((parseFloat(time / 3600.0) -
                        parseInt(time / 3600.0)) * 60) + '分鐘' +
                    parseInt((parseFloat((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60) -
                        parseInt((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60)) * 60) + '秒';
            } else if (time >= 60 * 60 * 24) {
                time = parseInt(time / 3600.0 / 24) + '天' + parseInt((parseFloat(time / 3600.0 / 24) -
                        parseInt(time / 3600.0 / 24)) * 24) + '小時' + parseInt((parseFloat(time / 3600.0) -
                        parseInt(time / 3600.0)) * 60) + '分鐘' +
                    parseInt((parseFloat((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60) -
                        parseInt((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60)) * 60) + '秒';
            } else {
                time = parseInt(time) + '秒';
            }
        }
        return time;
    },

    /**
     * 獲取年月日 星期 時分秒
     * @return {string}
     */
    geyThisDateYYMMDDHmi() {
        return moment().format(`YYYY年MM月DD日 dddd HH:mm:ss`);
    },

    /**
     * 轉換時間戳 年月日時分秒
     * @param timestamp
     * @return {string}
     */
    formatDateYearMonthDayAndHmsChinese(timestamp) {
        if (timestamp) {
            return moment(timestamp * 1000).format(constant.CHANESEYYYYMMDDHHMMII);
        }
    },

    /**
     * 獲得本月的截止日期
     * @return {*|string}
     */
    getMonthEndDate() {
        let now = new Date(); //當前日期
        let nowMonth = now.getMonth(); //當前月
        let nowYear = now.getFullYear(); //當前年
        let monthEndDate = new Date(nowYear, nowMonth, this.getMonthDays(nowMonth));
        return this.formatDate(monthEndDate);
    },

    /**
     * 獲得某月的天數
     * @param myMonth
     * @return {number}
     */
    getMonthDays(myMonth) {
        let now = new Date(); //當前日期
        let nowYear = now.getFullYear(); //當前年
        let monthStartDate = new Date(nowYear, myMonth, 1);
        let monthEndDate = new Date(nowYear, myMonth + 1, 1);
        let days = (monthEndDate - monthStartDate) / (1000 * 60 * 60 * 24);
        return days;
    },

    /**
     * 格局化日期:yyyy-MM-dd
     * @param date
     * @return {string}
     */
    formatDate(date) {
        let year = date.getFullYear();
        let month = date.getMonth() + 1;
        let weekDay = date.getDate();

        if (month < 10) {
            month = '0' + month;
        }
        if (weekDay < 10) {
            weekDay = '0' + weekDay;
        }
        return (year + '-' + month + '-' + weekDay);
    },

    /**
     * 獲得本月的開始日期時間戳
     * @return {*|string}
     */
    getMonthBeginDateStamp() {
        let now = new Date(); //當前日期
        let nowMonth = now.getMonth(); //當前月
        let nowYear = now.getFullYear(); //當前年
        let monthStartDate = new Date(nowYear, nowMonth, 1);
        return this.getFormattertDateTimeStamp(this.formatDate(monthStartDate) + ' ' + '00:00:00') / 1000;
    },

    /**
     * 獲得本月的截止日期時間戳
     * @return {*|string}
     */
    getMonthEndDateStamp() {
        let now = new Date(); //當前日期
        let nowMonth = now.getMonth(); //當前月
        let nowYear = now.getFullYear(); //當前年
        let monthEndDate = new Date(nowYear, nowMonth, this.getMonthDays(nowMonth));
        return this.getFormattertDateTimeStamp(this.formatDate(monthEndDate) + ' ' + '23:59:59') / 1000;
    },

    /**
     * 根據指定月份時間戳獲得最後一天日期時間戳
     * @param stamp 時間戳
     * @return {number}
     */
    getFormattertMonthEndDateStamp(stamp) {
        let arr = this.formatDateYearMonthDay(stamp).split('-');
        let newYear = arr[0]; //取當前的年份
        let newMonth = arr[1]++; //取下一個月的第一天,方便計算(最後一天不固定)
        if (arr[1] > 12) { //如果當前大於12月,則年份轉到下一年
            newMonth -= 12; //月份減
            newYear++; //年份增
        }
        let oneDay = (60 * 60 * 24 * 1000) - 1000;
        let date = new Date(newYear, newMonth, 1); //取當年當月中的第一天
        let lastDay = (new Date(date.getTime() - oneDay)).getDate(); //獲取當月最後一天日期
        let fmt = newYear + '/' + newMonth + '/' + lastDay + ' ' + '23:59:59';
        return Date.parse(new Date(fmt)) / 1000;
    },

    /**
     * 獲取當年第一天的時間戳秒數
     * @return {number}
     */
    getFirstDayOfYear() {
        let date = new Date();
        date.setDate(1);
        date.setMonth(0);

        let y = date.getFullYear(); //年
        let m = date.getMonth() + 1; //月
        let d = date.getDate(); //日
        let fmt = y + '/' + m + '/' + d + ' ' + '00:00:00';
        return Date.parse(new Date(fmt)) / 1000;
    },

    /**
     * 獲得指定日期的時間戳秒數
     * @param formatterDate YYYY-MM-DD hh:mm:ii
     * @return {number} 時間戳秒數
     */
    getFormattertDateTimeStamp(formatterDate) {
        if (formatterDate.indexOf('-') != -1) {
            return Date.parse(new Date(formatterDate.replace(/-/g, '/')));
        } else {
            return Date.parse(new Date(formatterDate));
        }
    },

    /**
     * 轉換時間戳沒有年份
     * @param timestamp
     * @return {string}
     */
    formatDateNoyear(timestamp) {
        if (timestamp) {
            let times = null;
            String(timestamp).length > 10 ? times = timestamp : timestamp = timestamp * 1000;
            if (window.i18n.locale == 'zh') {
                return moment(times).format('MM-DD HH:mm');
            } else {
                let newDate = new Date();
                newDate.setTime(times);
                return newDate.toString().substr(4, 6) + 'th ' + newDate.toString().substr(16, 5);
            }
        }
    },

    /**
     * 轉換時間戳沒有小時數
     * @param timestamp
     * @return {string}
     */
    formatDateNoHour(timestamp) {
        if (timestamp) {
            let times = null;
            String(timestamp).length > 10 ? times = timestamp : timestamp = timestamp * 1000;
            if (window.i18n.locale == 'zh') {
                return moment(times).format('YYYY-MM-DD');
            } else {
                let newDate = new Date();
                newDate.setTime(times);
                return newDate.toString().substr(4, 6) + 'th ';
            }
        }
    },

    /**
     * 保留兩位小數不四捨五入
     * @param value
     * @return {*}
     */
    tofixPrice(value) {
        if (value === 0) {
            return '0.00';
        }
        if (value) {
            let showTwo = value.toFixed(3);
            return showTwo.substring(0, showTwo.lastIndexOf('.') + 3);
        }
    },

    /**
     * 判斷是否是物件
     * @param obj
     * @return {boolean}
     */
    isEmpty(obj) {
        return (Object.keys(obj).length === 0 && obj.constructor === Object);
    },

    /**
     * 過濾圖片 只保留七牛雲的ServerName
     */
    filterUpdateImg(imgs) {
        return imgs.map((img) => {
            if (img.response && img.response.serverName) {
                return img.response.serverName;
            } else if (img.url) {
                if (img.url.indexOf('.com/') != -1) {
                    let subLen = img.url.indexOf('.com/') + 5;
                    return img.url.substring(subLen, img.url.length);
                } else if (img.url.indexOf('.cn/') != -1) {
                    let subLen = img.url.indexOf('.cn/') + 4;
                    return img.url.substring(subLen, img.url.length);
                }
            }
            return img;
        });
    },

    /**
     * 移除物件中的空字串
     * @param test
     * @param recurse
     */
    deleteEmptyString(test, recurse) {
        for (let i in test) {
            if (test[i] === '') {
                delete test[i];
            } else if (recurse && typeof test[i] === 'object') {
                this.deleteEmptyString(test[i], recurse);
            }
        }
    },

    /**
     * 刪除物件中的空Key
     * @param test
     * @param recurse
     */
    deleteEmptyObject(test, recurse) {
        for (let i in test) {
            if (this.isEmpty(test[i])) {
                delete test[i];
            } else if (recurse && typeof test[i] === 'object') {
                this.deleteEmptyObject(test[i], recurse);
            }
        }
    },

    /**
     * 移除物件中的無效屬性
     * @param obj
     * @return {*}
     */
    removeEmpty(obj) {
        Object.keys(obj).forEach(function(key) {
            (obj[key] && typeof obj[key] === 'object') && this.removeEmpty(obj[key]) ||
                (obj[key] === undefined || obj[key] === null || obj[key] === '') && delete obj[key];
        });
        return obj;
    },

    /**
     * 深度拷貝
     * @param {*} obj
     */
    deepCloneObject(obj) {
        let objClone = Array.isArray(obj) ? [] : {};
        if (obj && typeof obj === 'object') {
            for (let key in obj) {
                if (obj.hasOwnProperty(key)) {
                    //判斷ojb子元素是否為物件,如果是,遞迴複製
                    if (obj[key] && typeof obj[key] === 'object') {
                        objClone[key] = this.deepCloneObject(obj[key]);
                    } else {
                        //如果不是,簡單複製
                        objClone[key] = obj[key];
                    }
                }
            }
        }
        return objClone;
    },

    /**
     * json物件轉FormData
     * @param obj
     * @returns {*}
     */
    jsonToFormData(obj) {
        // 建立表單物件
        let formData = new FormData();
        if (obj) {
            for (let k in obj) {
                formData.append(k, obj[k]);
            }
        }
        return formData;
    },

    /**
     * 圖片預覽
     * @param {*} file
     */
    previewImage(file, domId) {
        var MAXWIDTH = 260;
        var MAXHEIGHT = 180;
        var dom = domId || 'preview';
        var div = document.getElementById(dom);
        let _this = this;
        if (file.files && file.files[0]) {
            div.innerHTML = '<img id=preview-' + dom + '>';
            var img = document.getElementById('preview-' + dom);
            img.onload = function() {
                var rect = _this.clacImgZoomParam(MAXWIDTH, MAXHEIGHT, img.offsetWidth, img.offsetHeight);
                img.width = rect.width;
                img.height = rect.height;
                //                 img.style.marginLeft = rect.left+'px';
                img.style.marginTop = rect.top + 'px';
            };
            var reader = new FileReader();
            reader.onload = function(evt) { img.src = evt.target.result; };
            reader.readAsDataURL(file.files[0]);
        } else { // 相容IE
            var sFilter = 'filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale,src="';
            file.select();
            var src = document.selection.createRange().text;
            div.innerHTML = '<img id=imghead>';
            let img = document.getElementById('imghead');
            img.filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src = src;
            var rect = _this.clacImgZoomParam(MAXWIDTH, MAXHEIGHT, img.offsetWidth, img.offsetHeight);
            //let status = ('rect:' + rect.top + ',' + rect.left + ',' + rect.width + ',' + rect.height);
            div.innerHTML = "<div id=divhead style='width:" + rect.width + 'px;height:' + rect.height + 'px;margin-top:' + rect.top + 'px;' + sFilter + src + "\"'></div>";
        }
    },

    /**
     * 相容性檢視設定
     * @param {*} maxWidth
     * @param {*} maxHeight
     * @param {*} width
     * @param {*} height
     */
    clacImgZoomParam(maxWidth, maxHeight, width, height) {
        var param = { top: 0, left: 0, width: width, height: height };
        if (width > maxWidth || height > maxHeight) {
            let rateWidth = width / maxWidth;
            let rateHeight = height / maxHeight;

            if (rateWidth > rateHeight) {
                param.width = maxWidth;
                param.height = Math.round(height / rateWidth);
            } else {
                param.width = Math.round(width / rateHeight);
                param.height = maxHeight;
            }
        }
        param.left = Math.round((maxWidth - param.width) / 2);
        param.top = Math.round((maxHeight - param.height) / 2);
        return param;
    }
};

相關推薦

分享一下常用工具ES6封裝

分享一下目前專案中用到的工具類,僅供參考,直接引用可能會報錯,用到的第三方外掛需要引入對應的包和模組才行  /**  * 公有方法類  */ import Chinese from '../../../static/js/i18n/zh-cn.js'; import En

javascript 總結(常用工具封裝

** JavaScript ** 1. type 型別判斷 isString (o) { //是否字串 return Object.prototype.toString.call(o).slice(8, -1) === 'String' } isNumb

專案經驗分享——Java常用工具集合

                寫在前面本文涉及的工具類部分是自己編寫,另一部分是在專案裡收集的。工具類涉及資料庫連線、格式轉換、檔案操作、傳送郵件等等。提高開發效率,歡迎收藏與轉載。資料庫連線工具類資料庫連線工具類——僅僅獲得連線物件 ConnDB.javapackage com.util;import j

常用JSON工具JsonUtil封裝

前言 專案中經常會有String轉Object以及Object轉Json字串的需求,故封裝一個常用Json工具類 Maven依賴 <dependency> <groupId>org.codehau

常用工具】SharedPreferences封裝SPUtils

public class SPUtils { /** * 儲存在手機裡面的檔名 */ public static final String FILE_NAME = "share_data"; /** * 儲

Java常用工具封裝——Base64 編碼和解碼

Base64 編碼和解碼工具類,供參考。 import java.io.*; /** * Base64 編碼和解碼。 * * @author jiangshuai * @date 2016年10月03日 */ public class Base64 { p

Java常用工具封裝——String操作工具

專案中經常需要用到String的一些操作,結合看到的一些前人的工具類抽取,編寫了如下針對String的常用操作的工具類,供大家參考。 package com.mkyong.common; import java.util.ArrayList; import

Java常用工具封裝——連線資料庫的工具

資料庫操作工具類,供大家參考。 package com.itjh.javaUtil; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement

基於Android系統Api封裝常用工具

專案地址 https://github.com/h4de5ing/AndroidCommon/blob/master/README-cn.md gradle使用方式 compile 'com.code19.library:library:0.1.2' 常用工具類 使用示

最全面的Java字節byte操作,處理Java基本數據的轉換及進制轉換操作工具,流媒體及java底層開發項目常用工具

進制 string 常用工具類 cat i++ logs 指定位置 tput off 前言:用於處理Java基本數據的轉換及進制轉換操作工具 一、實現功能 1、int預byte互轉 2、int與byte[]互轉 3、short與byte互轉 4、short與byte[]互轉

C#常用工具——Excel操作(ZT)

ada fin bject sta area exec public excel文件 站點 本文轉載於: http://www.cnblogs.com/zfanlong1314/p/3916047.html 1 /// 常用工具類—&mdash

Android 工具 SharedPreferences 封裝

state out into bool 替換 ole enc 例子 read   SharedPreferences 是 Android 數據存儲方式中的一種,特別適合用來存儲少量的、格式簡單的數據,比如應用程序的各種配置信息,如是否打開音效,是否開啟震動等等。  Shar

Android常用工具

cti def air exp -a src 重復元素 nec empty 主要介紹總結的Android開發中常用的工具類,大部分同樣適用於Java。目前包括HttpUtils、DownloadManagerPro、ShellUtils、PackageUtils、Prefe

【spring】spirng中的常用工具

ren handle file 監控 拷貝 trac convert cas har 一、概述   很多時候,很多工具類其實spring中就已經提供,常用的工具類有:     參考:https://www.cnblogs.com/langtianya/p/3875103

常用工具

回文 字符串 log 構建 對象 數據 for 靜態 tabs 字符串連接 方法1:使用“+” int score=80;String info="成績"+score; 方法2:使用String類的concat()方法 Strin

並發編程常用工具之countDownLatch和cyclicBarrier的使用對比

開放 spa 圖片 我們 啟用 線程 分享 ride 在線 1.CountDownLatch countDownLatch的作用是讓一組線程等待其他線程完成工作以後在執行,相當於加強版的join(不懂可以百度一下join的用法),一般在初始化的時候會在構

並發編程常用工具(二) SymaPhore實現線程池

調用 eve lec 示例 信號 使用 個人 string 實現 1.symaPhore簡介 symaphore(信號量)用來控制同時訪問某個資源的線程數量,一般用在並發流量控制。個人對它的理解相當於是接待室每次只能接待固定數量的人,當達到最高接待數的時

Java 常用工具整理

一、org.apache.commons.io.IOUtils closeQuietly 關閉一個IO流、socket、或者selector且不丟擲異常。通常放在finally塊。 toString 轉換IO流、 Uri、 byte[]為String。

Java 常用工具

PageBaen 分頁工具類 package com.strurts.utli; import java.util.Map; import javax.servlet.http.HttpServletRequest; public class PageBean {

java常用工具(一)—— Map 與 Bean 之間的互相轉換

import net.bytebuddy.implementation.bytecode.Throw; import org.springframework.cglib.beans.BeanMap; import java.beans.PropertyDescriptor; import java.lang