当前位置: 首页 > article >正文

获取服务器时间

由于客户端时间和服务器端时间不一致,需要将一个项目产品统一改成获取服务器时间,于是写了个全局方法来替换new Date()

1.创建一个getSystemTime文件注册为全局事件,

let nowTime = ''
let flag = true
let IntervalAdd = null
function 	getSystemTime(){
    // 触发函数更新时间,为了防止一段时间内重复触发加一个节流阀
  if(flag) {
    flag = false
    getSystemTimefun()
    setTimeout(() => {
        flag = true
    },5000)
  }
//  第一次进来没有时间,判断有时间先返回旧的时间,没有时间去触发获取服务器时间
  if(nowTime) {
    return JSON.parse(JSON.stringify(nowTime))
  }
}
 function getSystemTimefun() {
        var xhr = new XMLHttpRequest();
        //利用服务器接口来获取服务器时间,我这里使用了获取系统版本接口可自行修改
        xhr.open('get', 'api/auth/system/version');
        xhr.onreadystatechange = function () {
            //等待响应完成
            console.log(this.readyState === this.DONE);
            if (this.readyState === this.DONE) {
                //响应完毕后修改时区为东八区为准
                var serverTime = xhr.getResponseHeader('Date');
                var offset = new Date().getTimezoneOffset() / 60;
                // 没次调用时取校准
                nowTime  = new Date(new Date(serverTime).getTime() + offset * 60 * 60 * 1000 + 8 * 60 * 60 * 1000);
                // 获取当前服务器时间的年份
                 let year = nowTime.getFullYear();
           
                  // 建立一个定时器,每一秒将时间加一
                  if(IntervalAdd == null) {
                    // 设置一个自加数去校准,每过半小时去自动校准时间
                    let addFrequency = 0
                  IntervalAdd = setInterval(() => {
                      nowTime =  new Date(nowTime.getTime() + 1000)  
                      console.log(nowTime);
                      if(addFrequency >= 1800) {
                        addFrequency = 0
                        getSystemTimefun()
                      } else {
                        addFrequency++
                      }
                    },1000)
                  }
            }   
        };
        xhr.send(); 
 } 
export default getSystemTime
  

2.在app.vue中调用这个方法this.$cu.getSystemTime()第一次获取系统时间将他报错

3.每次调用时返回上一次获取的系统时间,并刷新这个系统时间


http://www.kler.cn/news/283410.html

相关文章:

  • 【jvm】局部变量表
  • 轻量级冠军:NVIDIA 发布具有领先准确率的小语言模型
  • Java Excel转PDF(免费)
  • 替换后的最长重复字符(LeetCode)
  • 网络编程(1)
  • 【重点】人工智能大语言模型技术发展研究报告2024|附下载
  • mac安装vue3成功步骤
  • STM32F1+HAL库+FreeTOTS学习7——列表和列表项
  • 养老小程序源码家政服务小程序开发方案
  • C# 爬虫技术:京东视频内容抓取的实战案例分析
  • 设计模式 13 责任链模式
  • 搭建webRTC cotrun流媒体服务器
  • Python中的命令模式:如何设计灵活的命令体系
  • Redis持久化方式、常见问题及解决方案
  • centos安装docker并配置加速器
  • Keil5 Debug模式Watch窗口添加的监控变量被自动清除
  • 【智能算法改进】多策略融合的改进黑猩猩搜索算法及其应用
  • 备忘录模式 详解
  • 电脑强制退出程序快捷键
  • pytorch交叉熵损失函数
  • 效果媲美GPT4V的多模态大型语言模型MiniCPM-V-2_6详细介绍
  • 数据结构(邓俊辉)学习笔记】串 03——KMP算法:记忆法
  • python批量生成sql用于创建500个用户
  • 从数据库中查找单词
  • JAVA电子器件制造行业生产管理系统计算机毕设计算机毕业设计
  • 2024.8.30(使用docker部署project-exam-system)
  • 20.神经网络 - 搭建小实战和 Sequential 的使用
  • 自动化数据汇总:使用Python从多个数据源汇总数据
  • linux查找mysql日志
  • 艾体宝干货丨Redis与MongoDB的区别