前端在通过接口获取到时间数据后返回的结果不是自己想要的格式可以通过以下的方式来进行处理
offTime: function(value) {
console.log("要格式化的数据", value);
const dt = new Date(value * 1000)
// const y = dt.getFullYear()
// const m = (dt.getMonth() + 1 + '').padStart(2, '0')
// const d = (dt.getDate() + '').padStart(2, '0')
const hh = (dt.getHours() + '').padStart(2, '0')
const mm = (dt.getMinutes() + '').padStart(2, '0')
const ss = (dt.getSeconds() + '').padStart(2, '0')
console.log(hh + ":" + mm + ":" + ss);
return y + "-" + m + "-" + d + " " + hh + ":" + mm + ":" + ss
},
}
首先讲一下dt括号内的东西
因为获取的时间戳精度不一样格式化所需要进行的处理也就不一样,具体规则如下
13位的时间戳,其精度是毫秒(ms);
10位的时间戳,其精度是秒(s);
13位数的时间戳转化为10位数的时间戳 ,除以1000;
10位数的时间戳转化为13位数的时间戳 ,乘以1000;
在javascript中, new Date().getTime() 得到的是13位的时间戳。
console.log(Date.now()) // 1641976859604
// 时间戳13位数,直接转,低于10位数,先乘1000再转
括号内的处理根据自身数据实际情况进行改动即可
下面再讲一个我自身在事件格式化的时候遇到的问题
后端返回给位的数据是年-月-日 时:分:秒 这种格式的,我的需求是把他处理为只显示年月日的格式
我用的是uniapp,安卓端正常是没有问题的,但是到了ios系统以后会变成NaN-NaN-NaN
原因在于ios系统会将 - 自主转译为 / 导致格式化失败
我们只需要作如下处理即可
data: function(input) {
var d = new Date(input.replace(/-/g, "/"));
var year = d.getFullYear();
var month = (d.getMonth() + 1).toString().padStart(2, "0");
var day = d.getDate() < 10 ? "0" + d.getDate() : "" + d.getDate();
return year + "-" + month + "-" + day;
},
当然也有更简单的方法来处理已经格式化的数据
var date = 2022-11-14 16:50:56
date.substring(0, 7); // 2022-11
date.substring(0, 10); // 2022-11-14
手写过滤器的方法就是上面这些啦,希望能帮到大家,本人技术也比较菜,写的东西一般都是比较基础的东西,为了有时候写代码方便快速实现简单功能,也想把自己踩过的坑发出来,让后学习的能少踩坑