-1

如何通过 php 从服务器获取第一次?

我已经测试了这段代码,但它不起作用。它得到了时间,但它没有计数?有什么问题?

<script type="text/javascript">
        function GetClock(){
            d = new Date(<?php echo date("y, n, j, G, i, s");?>);
            nhour = d.getHours();
            nmin = d.getMinutes();
            nsec = d.getSeconds();
            if(nhour ==  0) {
                ap = " AM";nhour = 12;
            }  else if(nhour <= 11) {
                ap = " AM";
            }  else if(nhour == 12) {
                ap = " PM";
            }  else if(nhour >= 13) {
                ap = " PM";nhour -= 12;
            }

            if(nmin <= 9) {
                nmin = "0" +nmin;
            } if(nsec <= 9) {
                nsec = "0" +nsec;
            }

            document.getElementById('clockbox').innerHTML=""+nhour+":"+nmin+":"+nsec+ap+"";
            setTimeout("GetClock()", 1000); 
        } 

        window.onload=GetClock;
</script>
4

1 回答 1

1

解释

问题是您为什么要使用 PHP 将日期时间写入DateJS 中的对象中?

PHP 只会写出页面呈现时的时间,它永远不会再改变。

然后,您将基于 JavascriptsetTimeout每 1 秒设置一次计数器,期望时钟以秒为单位递增,但它始终基于相同的原始时间(页面呈现时间)并且始终递增 1 秒。

例如。该页面于 2013 年 6 月 3 日 12:00:00 加载。您的代码如下所示:

d = new Date(13, 6, 3, 12, 0, 0); 

在页面加载时(如果您查看源代码)

1 秒后setTimeout,根据日期对象中的开始时间,在 12:0:01 触发并渲染时钟。

但是您的开始时间永远不会改变,因此每经过和触发的每一秒都将基于当前时间而不是当前时间setTimeout进行计算12:00:00

TLDR;并回答

删除PHP!

d = new Date();

或者,如果您绝对必须使用服务器时间。您需要像您所做的那样初始化日期对象,然后存储经过多少秒的计数并计算差异

于 2013-06-05T11:17:58.043 回答