跨时区时间运算以及时间实时更新方法

1、需求背景:

已知北京时间和北京时区GMT+8,需要算出目标国家所在时区的时间,并且时间是每1s前进1s。实时更新

2、思路:

先获取服务器时间,然后把服务器的时间在本地进行实时更新,而不是每1s获取一次服务器时间,服务器时间转为时间戳,用定时器每1s加1000ms,计算出来的变量,是当前服务器时间在本地上的实时更新。然后再用这个变量通过计算,算出来目标国家所在区时的时间。

目标国家所在区时的思路:当前北京时间减去8小时,算出GMT=0的时候的标准时间,然后再根据目标国家所在时区,进行再次加减。为了方便时间运算,需要把获取的北京的服务器时间转化为时间戳。再进行60x60x1000(1h=60m 1m=60s 1s=1000ms)。

转化为时间戳的方法:

formatTime(ts){
      let year =  ts.getFullYear();
      let month = ts.getMonth() + 1;
      month = month < 10 ? ('0' + month) : month;
      let date = ts.getDate();
      date = date < 10 ? ('0' + date) : date;
      let hours = ts.getHours();
      hours = hours < 10 ? ('0' + hours) : hours;
      let minute = ts.getMinutes();
      minute = minute < 10 ? ('0' + minute) : minute;
      let second = ts.getSeconds();
      second = second < 10 ? ('0' + second) : second;
      return year + '-' + month + '-' + date + ' ' + hours + ':' + minute + ':' + second
    },

3、代码展示

1)获取服务器时间

  methods:{
    async getTime() {
        this.serverTime = await getServerTime()
      },
      }

2)把服务器时间,加上定时器,在本地实时更新

mounted() {
      this.getTime()
      this.timer = setInterval(()=>{
        this.serverTime = new Date(this.serverTime.getTime() + 1000)
        console.log(this.serverTime.getTime());
      },1000)
      }

这里面this.serverTime.getTime已经把获取来的服务器时间转化为时间戳

3)转化运算:把不断变化的时间戳运算转化为目标国家所在的时区

computed:{
    regionalTime(){
        if (this.serverTime) {
          if (!this.timeZone) {
            return this.formatTime(this.serverTime)
          }
          return this.formatTime(new Date(this.serverTime.getTime() - 8 * 3600000 + (this.timeZone.substring(3,5)) * 3600000));
        }
        return null
    },
    }

4)清除定时器

destroyed(){
    if (this.timer) {
      clearInterval(this.timer)
    }
  },

猜你喜欢

转载自blog.csdn.net/qq_44415875/article/details/121286473