时间戳转换、节流函数、数组降维

本文介绍了一种将时间戳转换为可读格式的方法,并提供了实际应用案例。此外,还分享了如何利用节流函数来控制函数调用频率,以及数组降维和平坦化等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

时间戳转换

/**
 * 时间戳转换
 * @param value 任意形式的时间字符串
 * @returns {string} 格式化后的时间字符串
 */

export const fromData = function(value){
    const date = new Date(value)
    const year = date.getFullYear()
    const month = date.getMonth() + 1
    const day = date.getDate()
    const hour = date.getHours()
    const minute = date.getMinutes()
    const second = date.getSeconds()

    // 位数不够两位,前面加0
    const formatNumber = n => {
        n = n.toString()
        return n[1] ? n : '0' + n
    }

    return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second].map(formatNumber).join(':')
};
引入到需要转换的文件中,如果不能直接转换,需要循环用一下方法
1.this.tableData(表格带入的数组)
2. res.data.data  后端给的数组
3. lastFinishTime   里面的时间字段

this.tableData = res.data.data.map(item => {
            item.lastFinishTime = fromData(item.lastFinishTime)   // 可能需要 *1000看后端返回的数据
            return item
          })

使用方法时间戳转换:

   //引入
  import { fromData } from '../../../utils/util'
  方式一
  getSoftWareList(params = this.query) {
        this.$API.omAPI.swAPI.getSwList(params).then(res => {
          if (res.error === 0) {
            this.total = res.data.total
            this.softwareList = res.data.dataList.map(item => {
              item.versionCode = fromData(item.versionCode * 1000)     //  时间  乘以1000
              return item
            })
          }
        })
      },
方式二
this.$API.songLibrary.getdownloadAlert(parmas).then(res => {
        if (res.error === 0) {
          this.tableData = res.data.data.map(item => {
            item.lastFinishTime = fromData(item.lastFinishTime)        // 时间 不乘以1000
            return item
          })
          this.pageTotal = res.data.totalCount;
          this.query.page = res.data.page;
        } else {
          this.$message.error('获取歌曲列表失败!');
        }
      }, res => {
        this.$message.error('获取歌曲列表失败!');
      });

节流函数

/**
 * 节流函数
 * @param func 需要节流执行的函数
 * @param wait   节流时间
 * @returns {function(...[*]=)} 闭包
 */
export const throttle = function (func, wait) {
    var context, args;
    var previous = 0;

    return function() {
        var now = +new Date();
        context = this;
        args = arguments;
        if (now - previous > wait) {
            func.apply(context, args);
            previous = now;
        }
    }
};

数组降维

/**
 * 数组扁平化(数组降维)
 * arr<Array>: 需要被扁平化的数据
 */
export const flatArr = function (arr, attr) {
    const stack = [...arr]; //保证不会破坏原数组
    const result = [];
    while (stack.length) {
        const first = stack.shift();
        if (Array.isArray(first[attr]) && first[attr].length) {
            stack.unshift(...first[attr]);
        }
        result.push(first);
    }
    return result;
}
/**
         * 获取上一个月
         *
         * @date 格式为yyyy-mm-dd的日期,如:2014-01-25
         */
        function getPreMonth(date) {
            var arr = date.split('-');
            var year = arr[0]; //获取当前日期的年份
            var month = arr[1]; //获取当前日期的月份
            var day = arr[2]; //获取当前日期的日
            var days = new Date(year, month, 0);
            days = days.getDate(); //获取当前日期中月的天数
            var year2 = year;
            var month2 = parseInt(month) - 1;
            if (month2 == 0) {
                year2 = parseInt(year2) - 1;
                month2 = 12;
            }
            var day2 = day;
            var days2 = new Date(year2, month2, 0);
            days2 = days2.getDate();
            if (day2 > days2) {
                day2 = days2;
            }
            if (month2 < 10) {
                month2 = '0' + month2;
            }
            var t2 = year2 + '-' + month2 + '-' + day2;
            return t2;
        }
/**
         * 获取下一个月
         *
         * @date 格式为yyyy-mm-dd的日期,如:2014-01-25
         */        
        function getNextMonth(date) {
            var arr = date.split('-');
            var year = arr[0]; //获取当前日期的年份
            var month = arr[1]; //获取当前日期的月份
            var day = arr[2]; //获取当前日期的日
            var days = new Date(year, month, 0);
            days = days.getDate(); //获取当前日期中的月的天数
            var year2 = year;
            var month2 = parseInt(month) + 1;
            if (month2 == 13) {
                year2 = parseInt(year2) + 1;
                month2 = 1;
            }
            var day2 = day;
            var days2 = new Date(year2, month2, 0);
            days2 = days2.getDate();
            if (day2 > days2) {
                day2 = days2;
            }
            if (month2 < 10) {
                month2 = '0' + month2;
            }
        
            var t2 = year2 + '-' + month2 + '-' + day2;
            return t2;
        }
获取当前月第一天
function getFirstDayOfMonth(){
    var date = new Date();
    var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);
    return firstDay;
}

获取当月最后一天
function getLastDayOfMonth(){
    var date = new Date();
    var nextMonth = new Date(date.getFullYear(), date.getMonth()+1, 1);
    var lastDay = new Date(nextMonth.getTime()-1000*60*60*24);
    return lastDay;
}

根据当前时间获取本周一和周日的数据

// 获取周一到周末的日期
function getWeekTime (time) {
  var now = time ? new Date(time) : new Date() //如果没传日期进来,就默认今天
  var nowTime = now.getTime()
  var day = now.getDay() || 7 //为周日的时候 day 修改为7  否则当天周天会有问题
  var oneDayTime = 24 * 60 * 60 * 1000
  var MondayTime = nowTime - (day - 1) * oneDayTime //显示周一
  var SundayTime = nowTime + (7 - day) * oneDayTime //显示周日
 //得到 传进来那天所在周的周一和周日
  var date = new Date(MondayTime);
  var year = date.getFullYear();
  var month = date.getMonth() + 1;
  var day = date.getDate();
  var date1 = new Date(SundayTime);
  var year1 = date1.getFullYear();
  var month1 = date1.getMonth() + 1;
  var day1 = date1.getDate();
  return {
    MondayTime:`${[year, month, day].map(formatNumber).join('-')}`,
    SundayTime:`${[year1, month1, day1].map(formatNumber).join('-')}`
  }
}

获取上周一周日和下周一周日日期

// 获取下周日期
function nextlastWeek(date) {
	//获取今天
	let nowDate = date; //当天日期
	//今天是本周的第几天
	let nowDayOfWeek = nowDate.getDay();
	//当前日
	let nowDay = nowDate.getDate();
	//当前月
	let nowMonth = nowDate.getMonth();
	//当前年
	let nowYear = nowDate.getFullYear();
	//获得上周的开始日期
	let getUpWeekStartDate = formatDate(new Date(nowYear, nowMonth, nowDay - nowDayOfWeek + 8), 'Y-MM-dd');
	//获得上周的结束日期
	let getUpWeekEndDate = formatDate(new Date(nowYear, nowMonth, nowDay + (14- nowDayOfWeek)), 'Y-MM-dd');
	return [getUpWeekStartDate, getUpWeekEndDate]
}
// 获取上周日期
function prelastWeek(date) {
	//获取今天
	let nowDate = date; //当天日期
	//今天是本周的第几天
	let nowDayOfWeek = nowDate.getDay();
	//当前日
	let nowDay = nowDate.getDate();
	//当前月
	let nowMonth = nowDate.getMonth();
	//当前年
	let nowYear = nowDate.getFullYear();
	//获得上周的开始日期
	let getUpWeekStartDate = formatDate(new Date(nowYear, nowMonth, nowDay - nowDayOfWeek - 6), 'Y-MM-dd');
	//获得上周的结束日期
	let getUpWeekEndDate = formatDate(new Date(nowYear, nowMonth, nowDay + (7 - nowDayOfWeek - 7)), 'Y-MM-dd');
	return [getUpWeekStartDate, getUpWeekEndDate]
}
// 日期补0
function padLeftZero(str) {
	return ('00' + str).substr(str.length);
}
 // 日期格式化
function formatDate(data, fmt) {
	data = new Date(data)
	if (/(y+)/.test(fmt)) {
		fmt = String(fmt).replace(RegExp.$1, (data.getFullYear() + '').substr(4 - RegExp.$1.length));
	}
	let o = {
		'Y+': data.getFullYear(),
		'M+': data.getMonth() + 1,
		'd+': data.getDate(),
		'h+': data.getHours(),
		'm+': data.getMinutes(),
		's+': data.getSeconds()
	};
 
	// 遍历这个对象
	for (let k in o) {
		if (new RegExp(`(${k})`).test(fmt)) {
			let str = o[k] + '';
			fmt = String(fmt).replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str));
		}
	}
	return fmt;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值