项目场景:
后端返回时间格式为 “2022-11-26 19:07:45”
由于业务需要我这里显示倒计时效果,需要时间戳和本地时间进行计算。
具体实现效果:
问题解决
时间字符串转时间戳在安卓端正常,在苹果端出现转换异常。(小程序,APP端没有试验)
苹果端时间字符为“2022/12/02 10:32:10” 的时候才能转成时间戳。
安卓端都支持。
var timeStr = "2022-12-02 10:32:10"
//正则
var resData = timeStr.replace(/-/g, '/')
/// (new Date(resData)).getTime() 就可以将时间字符串转换成时间戳
// 下面就是获取当前时间戳以及,创建时间加上(天数 X 3600 X 1000)得到结束时间戳
let newTime = new Date().getTime();
let endTime = (new Date(resData)).getTime() + (1 * 3600 * 1000 )
let t = endTime - newTime;
// 方法是接收秒级时间戳
this.countDown(t / 1000);
倒计时的显示和方法
<view class="count-down u-flex" v-if="time">
<text class="count-down-tip">倒计时</text>
<view class="time-box u-flex">
<view class="count-text">{{ time.h || '00' }}</view>
:
<view class="count-text">{{ time.m || '00' }}</view>
:
<view class="count-text">{{ time.s || '00' }}</view>
</view>
</view>
// 变量
let timer = null;
export default {
data() {
return {
time: {
h:0,
m:0,
s:0
},
}
}
}
// 倒计时
countDown(t) {
const that = this;
timer = setInterval(() => {
if (t > 0) {
// that.time = that.$tools.format(t);
that.time = that.format(t);
t--;
} else {
this.grouponStatus = 'end'
clearInterval(timer);
that.time = false;
}
}, 1000);
},
format(t) {
let format = {
d: '00',
h: '00',
m: '00',
s: '00'
};
if (t > 0) {
let d = Math.floor(t / 86400);
let h = Math.floor((t / 3600) % 24);
let m = Math.floor((t / 60) % 60);
let s = Math.floor(t % 60);
format.d = d < 10 ? '0' + d : d;
format.h = h < 10 ? '0' + h : h;
format.m = m < 10 ? '0' + m : m;
format.s = s < 10 ? '0' + s : s;
}
return format;
},