解决服务器与本地时间戳不一致的问题
Posted 铁锤妹妹@
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决服务器与本地时间戳不一致的问题相关的知识,希望对你有一定的参考价值。
问题重现:
在做sign加签的时候,需要时间戳,提示签名失效;问题排查得出因为本地时间和服务器时间不一致导致的
思路:
1. 首先这种时间差,越早知道越好,所以初始化项目(App.vue)时候就去请求接口获取服务器时间戳,uniapp项目
2. 然后和本地时间求差值,存起来,比如服务器时间 - 本地时间,如果结果是正的,说明本地时间落后了,封装一个类,每次请求的时候,本地时间 + 差值 = 服务器时间
服务器时间 - 本地时间 = x;
服务器时间 = 本地时间 + x;
解决过程:
- App.vue
onLaunch: function () {
loginApi["launchTime"]({})
.then((res) => {
var resData = JSON.parse(decrymsg(res.data.value)); //后端返回的数据是加密过得,进行解密
if (resData.code === "200") {
var timestamp = resData.data.timestamp; //服务器时间戳
var myDate = (Date.now() + "").substr(0, 10); //本地时间戳
var dateDiff = timestamp - myDate; //求差值
uni.setStorageSync("dateDiff", dateDiff); //保存差值
}
})
.catch((error) => {
console.log(error);
});
},
- 封装公共方法
export const Query = () => {
const dateDiff = uni.getStorageSync('dateDiff')
let myTimestamp = (Date.now() + '').substr(0,10)
let timestamp = (parseInt(myTimestamp) + parseInt(dateDiff))
return {
timestamp: timestamp,
}
}
注意:
时间戳转为字符串类型了,所以在计算时候用parseInt()转为number类型,返回一个整数
以上是关于解决服务器与本地时间戳不一致的问题的主要内容,如果未能解决你的问题,请参考以下文章