v1.uviewui.com/js/time.htm… 注意我这里使用的是
我在一个项目中使用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;