zoukankan      html  css  js  c++  java
  • js解决客户端与服务器时间不一致的问题

     

    引出

    最近在写一个项目时,要根据时间进行不同的展示,直接用new Date().getTime()获取当前时间,结果就出问题了。有些用户擅自修改自己的本地时间,导致获取到的时间并不是当前时间,尴尬。

    思路

    既然如此,首先想到的就是让本地时间以服务器的时间为基准,只要让服务器传一个时间戳过来就可以了。那如何实现动态获取时间呢?毕竟不能每次获取时间都到服务器去要吧。一个粗糙的思路,只要知道现在与获取服务器时间过了多久,然后动态的相加就可以了。那如果记录时间差呢?

    刚开始我想的是,记录获取服务器时间时的时间点(gainServerTime),将当前时间点与gainServerTime相减,就可以得到经过了多久。但是,如果用户在进入页面之后修改时间的话,就会得到错误的时间差,并不能解决问题。

    然后我想到了定时器,记录时间秒数experienceTime,每秒+1,固然会牺牲一定的性能,但问题是我没想到更好的办法。

    实现

    /**
     * 获取当前时间的对象
     * @param serverTime
     * 服务器时间戳(秒)
    */
    function GetNowDate(serverTime){
        this.serverTime = serverTime || new Date().getTime();
        // 记录经历时间
        this.experienceTime = 0;
        this.init();
    }
    ​
    /**
     * 获取当前时间戳,毫秒级
     */
    GetNowDate.prototype.getTime = function (){
        return this.getDateObject().getTime();
    };
    ​
    ​
    /**
     * 获取当前时间date对象
     */
    GetNowDate.prototype.getDateObject = function(){
        return new Date(this.getNowMilliTime());
    };
    ​
    ​
    // 获取当前毫秒级时间戳
    GetNowDate.prototype.getNowMilliTime = function(){
        return (this.serverTime + this.experienceTime) * 1000;
    };
    ​
    // 初始化对象
    GetNowDate.prototype.init = function(){
        // 设置定时器,动态增加时间
        var _this = this;
        setInterval(function() {
            _this.experienceTime++;
        }, 1000);
    };

    当然,看着就有很多问题,之后遇到再完善吧

    码云地址 https://gitee.com/hujingnb/jsTool

     

  • 相关阅读:
    GitLab 介绍
    git 标签
    git 分支
    git 仓库 撤销提交 git reset and 查看本地历史操作 git reflog
    git 仓库 回退功能 git checkout
    python 并发编程 多进程 练习题
    git 命令 查看历史提交 git log
    git 命令 git diff 查看 Git 区域文件的具体改动
    POJ 2608
    POJ 2610
  • 原文地址:https://www.cnblogs.com/hujingnb/p/12080293.html
Copyright © 2011-2022 走看看