uview时间处理遇到的函数问题,输入的时间1990-03-17等,而显示的时间1970-01-01

365 阅读2分钟

v1.uviewui.com/js/time.htm… 注意我这里使用的是

image.png 我在一个项目中使用uview1.x版本的时候发现在使用timeFormat这个函数的时候,无论输入什么出生年月,总是显示1970-01-01,无法正确显示,在纠结了一段时间后,终于发现了问题

时间过滤判断时间戳从十位开始,如果是2000年之前的时间戳是九位数的,会出问题 uview-ui/libs/function/timeFormat.js此路径下timeFormat方法中加入 uview-ui/libs/function/timeFrom.js 注意此时这个地方显示多少天之前,如果等功能也请加上下面两句代码

// 如果dateTime长度为10或者13,则为秒和毫秒的时间戳,如果超过13位,则为其他的时间格式 if (dateTime.toString().length == 10) dateTime *= 1000; if (dateTime.toString().length == 9) dateTime *= 1000; 代码如下

function timeFormat(dateTime = null, fmt = 'yyyy-mm-dd') {
	if (!dateTime) return ''
	// 如果为null,则格式化当前时间
	if (!dateTime) dateTime = Number(new Date());
	// 如果dateTime长度为10或者13,则为秒和毫秒的时间戳,如果超过13位,则为其他的时间格式
	if (dateTime.toString().length == 10) dateTime *= 1000;
	if (dateTime.toString().length == 9) dateTime *= 1000;
	let date = new Date(dateTime);
	let ret;
	let opt = {
		"y+": date.getFullYear().toString(), // 年
		"m+": (date.getMonth() + 1).toString(), // 月
		"d+": date.getDate().toString(), // 日
		"h+": date.getHours().toString(), // 时
		"M+": date.getMinutes().toString(), // 分
		"s+": date.getSeconds().toString() // 秒
		// 有其他格式化字符需求可以继续添加,必须转化成字符串
	};
	for (let k in opt) {
		ret = new RegExp("(" + k + ")").exec(fmt);
		if (ret) {
			fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
		};
	};
	return fmt;
}

为什么会出现这个问题,最主要是时间戳的单位的问题,如果返回的时间戳是13位,那是以毫秒为单位,而返回为10位,则是以秒为单位,而实际上函数处理时候都是认为,你给的值都是以毫秒为单位,所以我在处理时加上个判断,这时候,只要是10位都乘以1000就可以实际显示正确的时间了。 而9位的原因就是2000年之前的时间(以秒单位),所以都乘以1000就可以解决

if (dateTime.toString().length == 10) dateTime *= 1000;

if (dateTime.toString().length == 9) dateTime *= 1000;