Javascript 带js和php的步行(tic-toc)时钟
在javascript和php上有一个带有“walkin”时钟的脚本(我需要服务器端的时间——这很重要),但它是停止的,在刷新页面之前不计算。我做错了什么,请帮忙。多谢各位Javascript 带js和php的步行(tic-toc)时钟,javascript,php,jquery,time,clock,Javascript,Php,Jquery,Time,Clock,在javascript和php上有一个带有“walkin”时钟的脚本(我需要服务器端的时间——这很重要),但它是停止的,在刷新页面之前不计算。我做错了什么,请帮忙。多谢各位 <?php $Hour = date("H"); $Minute = date("i"); $Second = date("s"); $Day = date("d"); $Month = date("m"); ?> <script type="text/javascript"> function c
<?php $Hour = date("H");
$Minute = date("i");
$Second = date("s");
$Day = date("d");
$Month = date("m"); ?>
<script type="text/javascript">
function clock() {
var d = new Date();
var month_num = d.getMonth();
var day = d.getDate();
var hours = <?php echo $Hour;?>;
var minutes = <?php echo $Minute;?>;
var seconds = <?php echo $Second?>;
month=new Array("января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря");
if (day <= 9) day = "0" + day;
if (hours <= 9) hours = "0" + hours;
if (minutes <= 9) minutes = "0" + minutes;
if (seconds <= 9) seconds = "0" + seconds;
date_time = "Today - " + day + " " + month[month_num] + " " + d.getFullYear() + " y. Now - "+ hours + ":" + minutes + ":" + seconds;
if (document.layers) {
document.layers.doc_time.document.write(date_time);
document.layers.doc_time.document.close();
} else document.getElementById("doc_time").innerHTML = date_time;
setTimeout("clock()", 1000);}
</script>
<span id="doc_time">Date & time</span>
<script type="text/javascript">clock();</script>
功能时钟(){
var d=新日期();
var month_num=d.getMonth();
var day=d.getDate();
var小时=;
var分钟=;
var秒=;
月份=新阵列(“ааааа”、“ааа”、“ааа”、“ааа”、“ааа”、“аааа”、“ааааа”、“ааа;
如果(dayphp代码在页面加载时运行一次,那么在每次调用clock()函数时,小时、分钟和秒将始终保持不变
如果您真的需要这样做,您必须使用AJAX每秒请求一个php脚本以从服务器获取当前时间,但请记住,如果多个用户同时打开页面,这些请求将有延迟,并且还会给服务器带来巨大的负载。您的问题:
- PHP在页面请求中提供相应的日期值
- 将这些值存储到JS中
- 您可以再次循环相同的值。因此,循环可以工作,但值不变
而不是您应该做的:
- 创建一个
var D=新日期(“”;
在您的职能范围之外
- 在每次超时时,在初始PHP日期上加上一秒钟
DATE=PHP:initial+JS:now-JS:initial
函数零(n){返回n>9?n:“0”+n;}
风险值月份=[
"января", "февраля", "марта", "апреля", "мая", "июня",
"июля", "августа", "сентября", "октября", "ноября", "декабря",
];
var jsDate=new Date();//存储JS时间
//出于演示目的,我将硬编码一个日期字符串:
var phpDate=新日期(“2018年9月9日星期日23:59:55+0000”);
//您可以改为使用此选项:
//var phpDate=新日期(“”);
功能时钟(){
var diff=+new Date()-+jsDate;//获取秒差
var date=新日期(+phpDate+diff);//将差异添加到初始PHP时间
var y=date.getFullYear(),
M=date.getMonth(),
d=零(date.getDate()),
h=零(date.getHours()),
m=零(date.getMinutes()),
s=零(date.getSeconds());
document.getElementById(“doc_time”).innerHTML=`
Бааa:${d}${months[M]}${y}。&emsp;
аБМа:${h}:${m}:${s}
`;
设置超时(时钟,1000);
}
时钟();
什么是document.layers
?它是某个元素ID?另外,如果您已经在PHP中定义了它,为什么要使用var d=new Date();var month_num=d.getMonth();
;
。为什么要将JS和PHP@RokoC.Buljan...是的,存在ID元素。我看到了一个错误。不要使用窗口以DOM元素(ID)为目标。层
一旦有人或您自己引入全局var layers=“foo”
您将失去对元素的控制。使用document.getElementById(“层”)
取而代之;或者是速度明显较慢的document.querySelector(“层”)
抱歉,页面重新加载不是我的方式……但感谢您花时间@jbцццццСццццццццццццццццццццццnd使用setSeconds
在一段时间后,时钟将失去准确性,因为不能保证1000的超时正好是1秒。