我有时钟在我的网站显示服务器时间(运行)有时它停止工作,似乎他使页面运行得更慢。有比这更好的方法:
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自述文件