工具组件封装

106 阅读4分钟

小程序时间戳转换

//时间间隔函数
export function timeInterval(timesData) {
  //如果时间格式是正确的,那下面这一步转化时间格式就可以不用了
  var dateBegin = timesData;//将-转化为/,使用new Date    
  var dateEnd = new Date();//获取当前时间   
  var dateDiff = Math.abs( dateEnd.getTime() - dateBegin );  //时间差的毫秒数
  var yearDiff = Math.floor(dateDiff / (24 * 3600 * 1000*365));
  var dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000));  //计算出相差天数
  var leave1 = dateDiff % (24 * 3600 * 1000)    //计算天数后剩余的毫秒数
  var hours = Math.floor(leave1 / (3600 * 1000))//计算出小时数
  //计算相差分钟数
  var leave2 = leave1 % (3600 * 1000)    //计算小时数后剩余的毫秒数
  var minutes = Math.floor(leave2 / (60 * 1000))//计算相差分钟数
  //计算相差秒数
  var leave3 = leave2 % (60 * 1000)      //计算分钟数后剩余的毫秒数
  var seconds = Math.round(leave3 / 1000);
  var timesString = '';
  if (yearDiff!=0){
    timesString = yearDiff + '年前';
  } else if (yearDiff == 0   && dayDiff != 0) {
    timesString = dayDiff + '天前';
  } else if (dayDiff == 0 && hours != 0) {
    timesString = hours + '小时前';
  } else if (hours == 0 && minutes != 0) {      
    timesString = minutes + '分钟前';      
  } else if (minutes == 0 && seconds<60){ 
    timesString = '刚刚'; 
  } 
  return timesString 
}


// 日期格式化
export function parseTime(time, pattern) {
  if (arguments.length === 0 || !time) {
    return null
  }
  const format = pattern || '{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)
    } else if (typeof time === 'string') {
      time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), '');
    }
    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
}

使用方法

image.png

big.js函数

import Big from "big.js";

Big.DP = 2; // 除法保留两位小数

// 加法(数组)
export function plus(arr: any[]) {
  let res = 0;
  for (const n of arr) {
    res = Big(res).plus(n);
  }
  return res.toString();
}

// 减法
export function minus(x, y) {
  return Big(x).minus(y).toString();
}

// 乘法(数组)
export function times(arr: any[]) {
  let res = 1;
  for (const n of arr) {
    res = Big(res).times(n);
  }
  return res.toString();
}

// 除
export function div(x, y) {
  return Big(x).div(y).toString();
}

封装一些常用的date对象


// 时间格式转换时间戳
export function format_datetime_to_timestamp(value: string) {
    if (value === '' || value == null) {
        return value
    }
    let stamp = new Date(value).getTime()
    return stamp + ''
}

// 格式化日期
export function format_timestamp_to_DateTime(timestamp: any, format = 'yyyy-MM-dd') {
    // 先把年 日 小时 不重复的字母转成正确格式
    format = format.replace(/[Y]/g, 'y').replace(/[D]/g, 'd').replace(/[h]/g, 'H')

    // MM表示月份 mm表示分钟 都为字母m 作区分
    format = format.replace(/-mm/g, '-MM').replace(/mm-/g, 'MM-')
    format = format.replace(/:MM/g, ':mm').replace(/MM:/g, 'mm:')
    return dateFormat(timestamp, format)
}

const dateFormat = function (timestamp: any, fmt = 'yyyy-MM-dd') {
    if (!timestamp) {
        return ''
    }
    let date = new window.Date(Number(timestamp))
    var o = {
        'y': date.getFullYear(), // 年份,注意必须用getFullYear
        'M': date.getMonth() + 1, // 月份,注意是从0-11
        'd': date.getDate(), // 日期
        'q': Math.floor((date.getMonth() + 3) / 3), // 季度
        'w': ['日', '一', '二', '三', '四', '五', '六'][date.getDay()], // 星期,注意是0-6
        'H': date.getHours(), // 24小时制
        'h': date.getHours() % 12 === 0 ? 12 : date.getHours() % 12, // 12小时制
        'm': date.getMinutes(), // 分钟
        's': date.getSeconds(), // 秒
        'S': date.getMilliseconds() // 毫秒
    }
    for (var i in o) {
        fmt = fmt.replace(new RegExp(i + '+', 'g'), function (m) {
            var val = o[i] + ''
            if (i === 'w') return val
            // 补0
            for (var j = 0, len = val.length; j < m.length - len; j++) val = '0' + val
            // 截取
            return m.length === 1 ? val : val.substring(val.length - m.length)
        })
    }
    return fmt
}


export
function getTimeRangeByArray(arr){
	const arrTemp = []
	if(arr && arr.length > 1){
		arrTemp.push(new Date(arr[0]))
		arrTemp.push(new Date(arr[1]))
	}
 
	return arrTemp;
}

export function getTimeRangeByJson(json){
	const arrTemp = []
	const obj = JSON.parse(json)
	if(obj && obj.start && obj.end){
		arrTemp.push(new Date(obj.start))
		arrTemp.push(new Date(obj.end))
	}
 
	return arrTemp;
}

/** *
* 获得当前时间
*/
function getCurrentDate() {
	return new Date()
}

/**
* **得到本季度开始的月份**
* @param month 需要计算的月份
***/
function getQuarterSeasonStartMonth(month) {
	// var quarterMonthStart = 0
	var spring = 0 // 春
	var summer = 3 // 夏
	var fall = 6 // 秋
	var winter = 9 // 冬
	// 月份从0-11
	if (month < 3) {
		return spring
	}

	if (month < 6) {
		return summer
	}

	if (month < 9) {
		return fall
	}

	return winter
}
/**
* **获得该月的天数**
* @param year年份
* @param month月份
* */
function getMonthDays(year, month) {
	// 本月第一天 1-31
	var relativeDate = new Date(year, month, 1)
	// 获得当前月份0-11
	var relativeMonth = relativeDate.getMonth()
	// 获得当前年份4位年
	var relativeYear = relativeDate.getFullYear()

	// 当为12月的时候年份需要加1
	// 月份需要更新为0 也就是下一年的第一个月
	if (relativeMonth === 11) {
		relativeYear++
		relativeMonth = 0
	} else {
		// 否则只是月份增加,以便求的下一月的第一天
		relativeMonth++
	}
	// 一天的毫秒数
	var millisecond = 1000 * 60 * 60 * 24
	// 下月的第一天
	var nextMonthDayOne = new Date(relativeYear, relativeMonth, 1)
	// 返回得到上月的最后一天,也就是本月总天数
	return new Date(nextMonthDayOne.getTime() - millisecond).getDate()
}
// **时间格式化**
function formatDate(date) {
	var myyear = date.getFullYear()
	var mymonth = date.getMonth() + 1
	var myweekday = date.getDate()
	if (mymonth < 10) {
		mymonth = '0' + mymonth
	}
	if (myweekday < 10) {
		myweekday = '0' + myweekday
	}
	return (myyear + '-' + mymonth + '-' + myweekday)
}
/** *
* **得到本年的起止日期**
*
*/
function getCurrentYear() {
	// 起止日期数组
	var startStop = []
	// 获取当前时间
	var currentDate = getCurrentDate()
	// 获得当前年份4位年
	var currentYear = currentDate.getFullYear()

	// 本年第一天
	var currentYearFirstDate = new Date(currentYear, 0, 1)
	// 本年最后一天
	var currentYearLastDate = new Date(currentYear, 11, 31)
	// 添加至数组
	startStop.push(formatDate(currentYearFirstDate))
	startStop.push(formatDate(currentYearLastDate))
	// 返回
	return startStop
}
/**
* **得到本半年开始的月份**
* @param month 需要计算的月份
***/
function getYearStartMonth(month) {
	// var quarterMonthStart = 0
	var up = 0 // 上
	var down = 6 // 下
	// 月份从0-11

	if (month < 6) {
		return up
	}else{
		return down
	}
}
/**
* **获得本半年的起止日期**
*/
function getHalfYearSeason() {
	// 起止日期数组
	var startStop = []
	// 获取当前时间
	var currentDate = getCurrentDate()
	// 获得当前月份0-11
	var currentMonth = currentDate.getMonth()
	// 获得当前年份4位年
	var currentYear = currentDate.getFullYear()
	// 获得本季度开始月份
	var quarterSeasonStartMonth = getYearStartMonth(currentMonth)
	// 获得本季度结束月份
	var quarterSeasonEndMonth = quarterSeasonStartMonth + 5

	// 获得本季度开始的日期
	var quarterSeasonStartDate = new Date(currentYear, quarterSeasonStartMonth, 1)
	// 获得本季度结束的日期
	var quarterSeasonEndDate = new Date(currentYear, quarterSeasonEndMonth, getMonthDays(currentYear, quarterSeasonEndMonth))
	// 加入数组返回
	startStop.push(formatDate(quarterSeasonStartDate))
	startStop.push(formatDate(quarterSeasonEndDate))
	// 返回
	return startStop
}
/**
* **获得本季度的起止日期**
*/
function getCurrentSeason() {
	// 起止日期数组
	var startStop = []
	// 获取当前时间
	var currentDate = getCurrentDate()
	// 获得当前月份0-11
	var currentMonth = currentDate.getMonth()
	// 获得当前年份4位年
	var currentYear = currentDate.getFullYear()
	// 获得本季度开始月份
	var quarterSeasonStartMonth = getQuarterSeasonStartMonth(currentMonth)
	// 获得本季度结束月份
	var quarterSeasonEndMonth = quarterSeasonStartMonth + 2

	// 获得本季度开始的日期
	var quarterSeasonStartDate = new Date(currentYear, quarterSeasonStartMonth, 1)
	// 获得本季度结束的日期
	var quarterSeasonEndDate = new Date(currentYear, quarterSeasonEndMonth, getMonthDays(currentYear, quarterSeasonEndMonth))
	// 加入数组返回
	startStop.push(formatDate(quarterSeasonStartDate))
	startStop.push(formatDate(quarterSeasonEndDate))
	// 返回
	return startStop
}
/**
* **获得本月的起止日期**
*/
function getMonthEndDate() {
	// 起止日期数组
	var startStop = []
	// 获取当前时间
	var currentDate = getCurrentDate()
	// 获得当前月份0-11
	var currentMonth = currentDate.getMonth()
	// 获得当前年份4位年
	var currentYear = currentDate.getFullYear()
	//当前日
	var nowDay = currentDate.getDate();

	var monthStartDate = new Date(currentYear, currentMonth, 1);
	var monthEndDate = new Date(currentYear, currentMonth, getMonthDays(currentMonth, currentMonth));
	// 加入数组返回
	startStop.push(formatDate(monthStartDate))
	startStop.push(formatDate(monthEndDate))
	// 返回
	return startStop
}
/**
* **获得本周的起止日期**
*/
function getWeekDate() {
	// 起止日期数组
	var startStop = []
	// 获取当前时间
	var currentDate = getCurrentDate()
	// 获得当前月份0-11
	var currentMonth = currentDate.getMonth()
	// 获得当前年份4位年
	var currentYear = currentDate.getFullYear()
	//今天本周的第几天
	var nowDayOfWeek = currentDate.getDay();
	//当前日
	var nowDay = currentDate.getDate();

	var weekStartDate = new Date(currentYear, currentMonth, nowDay - nowDayOfWeek + 1);
	var weekEndDate = new Date(currentYear, currentMonth, nowDay + (6 - nowDayOfWeek) + 1);
	// 加入数组返回
	startStop.push(formatDate(weekStartDate))
	startStop.push(formatDate(weekEndDate))
	// 返回
	return startStop
}
/**
* **获得本日的起止日期**
*/
function getDayDate() {
	// 起止日期数组
	var startStop = []
	// 获取当前时间
	var currentDate = getCurrentDate()
	// 加入数组返回
	startStop.push(formatDate(currentDate))
	startStop.push(formatDate(currentDate))
	// 返回
	return startStop
}

export 
function getStartEnd(index){
	var startStop = []
	switch(index) {
	case 0:
	    startStop=getDayDate()
	break;
	case 1:
	    startStop=getWeekDate()
	break;
	case 2:
	    startStop=getMonthEndDate()
	break;
	case 3:
	    startStop=getCurrentSeason()
	break;
	case 4:
	    startStop=getHalfYearSeason()
	break;
	case 5:
	    startStop=getCurrentYear()
	break;
	    default:
	}
	return startStop;
}