Jquery显示服务器时间


Jquery show server time

我有时钟在我的网站显示服务器时间(运行)有时它停止工作,似乎他使页面运行得更慢。有比这更好的方法:

PHP:

 <?php print date("H:i", time()); ?>
Jquery:

<script type="text/javascript">
    $(document).ready(function() {
        function show_clock() {
          $.ajax({
           type: 'POST',
           url: '/clock.php',
           timeout: 1000,
           success: function(data) {
              $("#servertime").html(data); 
              window.setTimeout(show_clock, 1000);
           },
          });
         }
         show_clock();
    });
</script>

编辑:也累了这段代码,但似乎也不完美:

<script type="text/javascript">
    var currenttime = '<? print date("F d, Y H:i:s", time())?>' //PHP method of getting server date
    var serverdate=new Date(currenttime)
    function padlength(what){
        var output=(what.toString().length==1)? "0"+what : what
        return output
    }
    function displaytime(){
        serverdate.setSeconds(serverdate.getSeconds()+1)
        var timestring=padlength(serverdate.getHours())+":"+padlength(serverdate.getMinutes())
        document.getElementById("servertime").innerHTML=timestring
    }
    setInterval("displaytime()", 1000)
</script>

为什么不获取页面加载时的服务器时间,然后每秒钟在客户端增加它?但是,这两种方法都不能给出服务器端实际时间的准确版本。

上述方法存在以下几个问题:

总的来说,根据您向用户展示的精确度,您可以使用服务器所在的相同时区(或从那里的初始时间集进行播种),使用纯jQuery/JavaScript完成时钟。如果您在地理位置上有多个服务器,那么上述方法仍然会导致不确定的结果,您可能倾向于创建基于UTC时间的JS时钟。

对于上面的jQuery:

这应该是一个GET请求而不是POST请求。ajax调用每秒都会对您站点上的每个用户进行访问,哎哟

这是一个老问题,但我创建了一个jQuery插件,可以接受服务器时间戳,如PHP时间戳:https://github.com/JohnRDOrazio/jQuery-Clock-Plugin。一个例子:

<?php
//Get a server side unix timestamp
$time = time();
?>
<input id="servertime" type="hidden" val="<?php echo $time; ?>" />

然后在初始化时钟时将该时间戳提供给插件:

<script type="text/javascript">
let servertime = parseInt( $("input#servertime").val() );
$("#clock").clock({"timestamp":servertime});
</script>

使用这个插件,您可以使用PHP风格的格式字符以任何方式格式化日期和时间。更多信息请参见github自述文件