28、常用时间工具方法集合-下

84 阅读2分钟

/**
 * 将UTC时间转换为本地时间字符串
 * @description 默认传入的为UTC时间,目前支持格式1970-01-01 00:00:00
 * @param {string} timeStr 源时间
 */
function toLocaleString(timeStr) {
	try {
		if (REG.DATE.test(timeStr)) {
			// 格式 yyyy-mm-dd hh:mm:ss
			return toLocaleStringByDate(timeStr);
		} else if (REG.TIME.test(timeStr)) {
			// 格式 hh:mm:ss
			return toLocaleStringByTime(timeStr);
		} else if (REG.DATE_Z.test(timeStr)) {
			// 格式 yyyymmddThhmmssZ
			let newTime = timeStr.replace(/[^0-9]/g, '');
			let date = `${newTime.slice(0, 4)}-${newTime.slice(4, 6)}-${newTime.slice(6, 8)}`;
			let time = `${newTime.slice(8, 10)}:${newTime.slice(10, 12)}:${newTime.slice(12, 14)}`;
			return toLocaleStringByDate(`${date} ${time}`);
		} else if (REG.DATE_M_D_Y.test(timeStr)) {
			let newTime = timeStr.split(' ');
			let dateList = newTime[0].split('-');
			let time = newTime[1];

			return toLocaleStringByDate(
				`${dateList[2]}-${dateList[0]}-${dateList[1]} ${time}`,
				'mmDDyy'
			);
		}
	} catch (e) {
		console.log('Please enter date as yyyy-mm-dd hh:mm:ss');
		return '';
	}
	throw new Error('Please enter date as yyyy-mm-dd hh:mm:ss');
}

/**
 * 获取当前浏览器客户端的时区
 * @description +0800为东八区
 * @returns {string} such as +0000 +0545
 */
function getTimezoon() {
	let timezoonOffset = new Date().getTimezoneOffset();
	const flag = timezoonOffset > 0 ? '-' : '+';

	timezoonOffset = Math.abs(timezoonOffset);

	const hours = Math.floor(timezoonOffset / 60);
	const minute = timezoonOffset % 60;
	return flag + addZero(hours) + addZero(minute);
}

/**
 * 格式化时间为对象形式
 *
 * @description
 * 接收Date、数字或字符串格式的UTC时间、UTC时间*1000(单位秒)
 * 转换为时间对象
 *
 * @method dateToObject
 * @param {Object | String | Number} param 时间
 * @returns {object} 日期结果对象
 */
function dateToObject(param) {
	let date = null;

	if (typeof param === 'object') {
		date = param;
	} else if (typeof param === 'string') {
		if (param.toString().length === 13) {
			date = new Date(param.replace(/-/g, '/'));
		} else if (param.toString().length === 10) {
			date = new Date(param * 1000);
		} else {
			date = new Date(param.replace(/-/g, '/'));
		}
	} else if (typeof param === 'number') {
		date = new Date(param);
	}

	if (!date) {
		return {};
	}

	const dateObj = {
		year: date.getFullYear(),
		month: addZero(date.getMonth() + 1),
		day: addZero(date.getDate()),
		hour: addZero(date.getHours()),
		minute: addZero(date.getMinutes()),
		second: addZero(date.getSeconds())
	};

	return dateObj;
}

/**
 * 将毫秒时间转换为本地时间字符串,支持格式毫秒
 * @description 返回格式:yyyy-mm-dd hh:mm:ss
 * @param {string} timeStr 源时间,毫秒格式
 */
function toLocaleStringByMs(timeStr) {
	const time = {};
	if (!timeStr) {
		return '';
	}
	let date = new Date(timeStr);

	time.y = date.getFullYear();
	time.m = addZero(date.getMonth() + 1);
	time.d = addZero(date.getDate());
	time.h = addZero(date.getHours());
	time.min = addZero(date.getMinutes());
	time.s = addZero(date.getSeconds());
	return `${time.y}-${time.m}-${time.d} ${time.h}:${time.min}:${time.s}`;
}

/**
 * @method getDateWeek
 * @description 判断星期,字符串修改
 * @param  {string} data 时间字符串 格式 'YY-mm-dd'
 * @return {string} str  规范后时间字符串 格式 'xxxx年xx月xx日 星期X'
 */
function getDateWeek(date) {
	let dateSplitArr = date.split('-');
	let str = dateSplitArr[0] + '年' + dateSplitArr[1] + '月' + dateSplitArr[2] + '日';
	let week = new Date(date).getDay();
	switch (week) {
		case 0:
			str += ' 星期日';
			break;
		case 1:
			str += ' 星期一';
			break;
		case 2:
			str += ' 星期二';
			break;
		case 3:
			str += ' 星期三';
			break;
		case 4:
			str += ' 星期四';
			break;
		case 5:
			str += ' 星期五';
			break;
		case 6:
			break;
		default:
			str += ' 星期六';
			break;
	}
	return str;
}
/**
 *
 * 比较日期大小
 * @param {any} start  开始日期
 * @param {any} end    结束日期

 *
 */
function compareDate(start, end) {
	return new Date(start).getTime() < new Date(end).getTime();
}

/**
 * valifyTime 校验时间格式
 * isTimeContainTime 判定两组时间序列是否存在重复(交叉或包含)
 * toISOString 将时间转换为UTC时间字符串
 * toLocaleString 将时间转换为本地时间字符串
 * getTimezoon 获取当前时区
 */
export {
	valifyTime,
	isTimeContainTime,
	toISOString,
	toLocaleString,
	getTimezoon,
	dateToObject,
	toLocaleStringByMs,
	getDateWeek,
	compareDate,
	dateFormat,
	getTimeRange
};