专栏首页烟草的香味js解决客户端与服务器时间不一致的问题

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

本文分享自微信公众号 - 烟草的香味(hujing-bc),作者:胡靖哥哥

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • js动态添加div

    因为每个input标签的name如果相同的话, 在后端接收的时候会出错, 所以我的解决办法就是在name后加上一个数字, 后端用一个循环进行接收

    烟草的香味
  • 6大设计原则之迪米特法则

    迪米特法则也称为最少知识原则,一个对象应该对其他对象有最少的了解. 通俗的讲,一个类应该对自己需要耦合或调用的类知道的最少,被调用类的内部是如何复杂都和我没关系...

    烟草的香味
  • 设计模式之空对象模式

    空对象模式是通过实现一个默认的无意义对象来避免null值出现, 简单地说,就是为了避免在程序中出现null值判断而诞生的一种常用设计方法.

    烟草的香味
  • 踩坑记:rocketmq-console 消费TPS为0,但消息积压数却在降低是个什么“鬼”

    当消息积压后,消费端将其代码进行优化后,重启消费端服务器,从rocketmq-console上发现TPS为0。如图所示。

    丁威
  • Apache httpclient的execute方法调试

    版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.blog.csdn.net/article/detai...

    Jerry Wang
  • Javascript设计模式学习(三)更多的高级样式

    if (hid != null && hid != undefined & hid != "") {

    大江小浪
  • 安防视频监控系统的GPS时钟同步方案汇总

    安防视频监控系统的时钟同步是指综合应用视音频监控、通信、计算机网络等技术监视设防区域,并实时显示、记录现场图像的电子系统或网络。 安防视频监控系...

    用户3797148
  • 代码小记

      前一阵子一直在制作一款小游戏,虽说最终的成果并不完美,但也算是花了不少精力,网上批评的声音不少,但更多的则是鼓励,这也让我们颇感欣慰,自省之余,也算拾得一些...

    用户2615200
  • bootstrap well 块

    <div class="well"> Look, I'm in a well! </div> <div class="well well-lg"> Lo...

    用户5760343
  • 关于AS3中Vector的sort排序

    调用 $back.sort(sortRank);  注 : $back 是 vector.<RankPlayerModel>类型的

    py3study

扫码关注云+社区

领取腾讯云代金券