【问题标题】:Synchronizing time in application via JavaScript on iPad在 iPad 上通过 JavaScript 在应用程序中同步时间
【发布时间】:2014-05-19 09:46:35
【问题描述】:

场景:

我有一个 iPad 网络应用程序,它连接到我的 Exchange 服务器以在 Outlook 中显示会议室的可见性。

  • 时钟必须非常准确(在 Exchange Server 时间的 5 秒内)

我的问题是:

  • iPad 与苹果时间服务器同步时间,如果不越狱 iPad,就无法更改此设置
  • iPad 时钟与我们的服务器不同步

我目前的解决方案:

  • 我有一个 Clock.aspx 页面,它返回当前时间并将其显示在正确的 div 中:

            var getTime = function () {
    
              $.get('Clock.aspx', function (data) {
                  $('#txt').html('<h1>' + data + '</h1>');
    
    
              });
             }   
    

但是:

  • 这是非常低效的,因为每 10 秒调用一次服务器(这会导致 iPad 每 3/4 天崩溃一次)

我想做的事:

  • 每小时从 Clock.aspx 中提取一次时间,并在其余时间使用 javascript 增加它,这将显着减少对服务器的调用。

请告诉我最好和最有效的方法。

如果您对提高效率的方法有任何其他建议,我也很乐意听到。

【问题讨论】:

  • 为什么不将您的服务器与可靠的时间服务器同步?
  • @rene - iPad 中没有更改时间服务器的设置,您被 Apple 的时间服务器卡住了,这可能是准确的,但与我们的服务器时间服务器有偏差(这是不可更改的)跨度>
  • @Corbin,rene 说的是你的 Exchange 服务器,而不是你的 iPad。
  • @FrédéricHamidi - 不幸的是,为一家全球性组织工作,这些事情不容易改变!
  • @rene 此外,这意味着允许 iPad 访问代理服务器(因此它可以访问苹果的时间服务器),由于安全限制,我们无法这样做!

标签: c# javascript jquery time webforms


【解决方案1】:

好的,这并不完美,但目前满足我的要求 - 如果有更有效和准确的解决方案出现,我将再次感谢它!

          var hour = parseInt("<%=DateTime.Now.Hour %>", 10);
          var minute = parseInt("<%=DateTime.Now.Minute %>", 10);
          var second = parseInt("<%=DateTime.Now.Second %>", 10);
          //            var x = hour.tostring() +":"+ minute.tostring() +":"+ second.tostring();
          //            alert(x);

          function showTime() {
              second++;
              if (second > 59) {
                  second = 0;
                  minute++;
              }

              if (minute > 59) {
                  minute = 0;
                  hour++;
              }
              minute = checkTime(minute);
              second = checkTime(second);
              var clock = hour.toString() + ":" + minute.toString() + ":" + second.toString();
              document.getElementById("txt").innerHTML = "<h1>" + clock + "</h1>";
              function checkTime(i) {

                  return (i < 10 ? '0' : '') + i;


              }
          }

          setInterval('showTime()', 1000);

【讨论】:

    【解决方案2】:

    使用我的原始答案几天后,我注意到同步已失效,此脚本每小时与服务器时间同步以相应地重新同步时间,这意味着时钟的准确性非常接近服务器。以前的脚本每天最多可能会丢失 5 分钟。我希望这对某人有帮助!

      var serverDate;
    
        function getServerDate() {
        serverDate = new Date("<%=DateTime.Now %>"); 
        }
    
    function tick() {
    serverDate.setSeconds(serverDate.getSeconds() + 1);
    var min = serverDate.getMinutes();
    var hour = serverDate.getHours();
    var sec = serverDate.getSeconds();
    
    
    
    if (min == 30) {
    
        $.get('Clock.aspx?type=2', function (data) {
    
            serverDate = new Date(data.split(">")[1].split("<")[0]);
    
            min = serverDate.getMinutes();
            hour = serverDate.getHours();
            sec = serverDate.getSeconds();
    
    
        });
    
    }
    
        if (hour < 10) hour = "0" + hour;
        if (min < 10) min = "0" + min;
        if (sec < 10) sec = "0" + sec;
    
       document.getElementById("txt").innerHTML = "<h1>" + hour + ":" + min + ":" + sec; +  "</h1>";
    
    
    }
    
    window.onload = function () {
    getServerDate();
    setInterval("tick()", 1000);
    }
    

    编辑添加clock.aspx是一个输出DateTime.Now.ToString()的页面

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      相关资源
      最近更新 更多