-3

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

PHP:

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

查询:

<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>
4

3 回答 3

2

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

于 2013-06-22T10:44:06.337 回答
1

上述方法存在几个问题:

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

至于上面的jQuery:

这应该是 GET 而不是 POST 请求。ajax 调用也会为您网站上的每个用户每秒访问您的服务器,哎哟。

于 2013-06-22T10:44:34.417 回答
0

这是一个老问题,但我创建了一个 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 自述文件。

我还将插件发布到 npm以进行良好的衡量。

于 2021-03-14T01:06:30.560 回答