【问题标题】:Browser seems to cache DateTime浏览器似乎缓存了 DateTime
【发布时间】:2017-12-17 11:18:51
【问题描述】:

我意识到,如果我使用新的 Date 对象,系统时间的变化不会立即反映在 javascript 中。每分钟更新一次。

var fakeElapsed = 0;

$(document).ready(function(){
	
    var oldTime = 0;
  
    function fakeTimeLoop(time){
		  fakeElapsed+=(time-oldTime);
		  oldTime = time;
      $("div").html(fakeElapsed);
	  }
  
	  var clock = new Date();
    var start = clock.getTime(); 
    oldTime = clock.getTime();
    setInterval(function(){
        var clock2 = new Date();
        var end = clock2.getTime();  
        var elapsed = end-start;
        if(elapsed%5===0){
          fakeTimeLoop(end);
        }},
        1
    );
  
 });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<body>
<div></div>
</body>

时间码,如果您将时间向前(或向后),则需要一分钟才能更改经过的时间。

是否有每秒更新一次系统时间?

编辑:对于那些感到困惑的人,系统的变化不会立即反映在 Chrome 和 Opera 上,但在 IE 和 Mozzila 上会立即反映,我假设它的顺序是避免每次需要构建时都调用昂贵的系统调用一个新的 Date 对象。

我在寻找什么:无论如何是要在 chrome/opera 中获取当前系统时间还是立即检测系统时间的变化?

【问题讨论】:

    标签: javascript datetime


    【解决方案1】:

    我不清楚您要完成什么,但您的setInterval 被编程为每毫秒执行一次(第二个参数以毫秒为单位),但browsers treat any value less than 10 as equal to 10。即使有这个限制,也不能保证时间是准确的,所以函数很可能每 11、12、13 等毫秒执行一次。

    【讨论】:

    • 您好,感谢您的回复。 setInterval 无关紧要。我正在尝试计算系统时间经过的时间,即使用户尝试向前跳过时间。有什么想法吗?
    • 因为setInterval 不是每毫秒触发一次,所以条件if(elapsed%5===0) 实际上是随机的。您的计算是正确的,但更新 HTML 的代码只是偶尔运行。
    • 嗨。我确实意识到了这一点,并且我删除了每毫秒条件,它仍然没有立即反映系统时间的变化
    猜你喜欢
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 2012-02-18
    • 2011-11-01
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    相关资源
    最近更新 更多