解决服务器与本地时间戳不一致的问题

Posted 铁锤妹妹@

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决服务器与本地时间戳不一致的问题相关的知识,希望对你有一定的参考价值。

问题重现:

在做sign加签的时候,需要时间戳,提示签名失效;问题排查得出因为本地时间和服务器时间不一致导致的

思路:

1. 首先这种时间差,越早知道越好,所以初始化项目(App.vue)时候就去请求接口获取服务器时间戳,uniapp项目
2. 然后和本地时间求差值,存起来,比如服务器时间 - 本地时间,如果结果是正的,说明本地时间落后了,封装一个类,每次请求的时候,本地时间 + 差值 = 服务器时间

服务器时间 - 本地时间 = x;
服务器时间 = 本地时间 + x;

解决过程:

  1. 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);
      });
  },
  1. 封装公共方法
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类型,返回一个整数

以上是关于解决服务器与本地时间戳不一致的问题的主要内容,如果未能解决你的问题,请参考以下文章

js解决客户端与服务器时间不一致的问题

关于FileZilla上传文件后服务器端文件与本地文件大小不一致的解决方法

electron打包报时间戳不准确错误

Valgrind 内存泄漏报告中的时间戳不正确

Firebase 查询子键中的时间戳不起作用

Python图像resize前后颜色不一致问题