我在使用php和js显示服务器的实际时间时遇到了一些困难
在服务器端,我有以下php代码:
$date = new DateTime();
echo $date->getTimestamp();
在客户端上,如果有以下js代码,可以更改div的内容以显示当前时间:
flag = true;
timer = '';
function clock()
{
if ( flag ) {
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "backend/time_backend.php?action=serverTime", false);
xmlhttp.send();
var stamp = xmlhttp.responseText;
timer = stamp*1000;
}
var d = new Date(timer);
var hours = d.getHours();
var minutes = d.getMinutes();
var seconds = d.getSeconds();
//hours = hours % 12;
//hours = hours ? hours : 12; // the hour ’0' should be ’12'
minutes = minutes < 10 ? '0'+minutes : minutes;
seconds = seconds < 10 ? '0'+seconds : seconds;
var strTime = hours + ':' + minutes + ':' + seconds;
document.getElementById("clock").innerHTML= strTime ;
flag = false;
timer = timer + 1000;
}
window.onload = function() {
setInterval(clock, 1000);
};
只要服务器和我的时区相同,这就可以工作。但一旦我在服务器上更改时区,它就不再工作了。它仍然会显示我的本地客户端时间,尽管服务器上的bash命令date
以正确的偏移量显示时间。
我该怎么解决这个问题?我真的需要显示服务器的本地时间。
您正在从PHP发送unix时间戳可能正在使用
echo date("Y-m-d H:i:s", time());
如果您想使用字符串来使用JS创建日期对象。
你的JS代码应该是
function clock()
{
if ( flag ) {
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "backend/time_backend.php?action=serverTime", false);
xmlhttp.send();
var stamp = xmlhttp.responseText;
var timer = new Date(stamp);
}
var d = new Date(timer);
var hours = d.getHours();
var minutes = d.getMinutes();
var seconds = d.getSeconds();
//hours = hours % 12;
//hours = hours ? hours : 12; // the hour ’0' should be ’12'
minutes = minutes < 10 ? '0'+minutes : minutes;
seconds = seconds < 10 ? '0'+seconds : seconds;
var strTime = hours + ':' + minutes + ':' + seconds;
document.getElementById("clock").innerHTML= strTime ;
flag = false;
timer = new Date(timer.getTime() + 1000);
}
您可以使用ISO 8601格式的日期。
$date = date("c", time());
会给你一个。
ISO 8601数据元素和交换格式——信息互换-日期和时间的表示是国际性的涵盖日期和时间相关数据交换的标准。是的由国际标准化组织(ISO)发布,以及于1988年首次出版。本标准旨在提供一种明确定义的日期表示方法和时间,以避免对数字表示的误解日期和时间,特别是当数据在具有不同书写数字日期和时间
然后,您可以执行Date.parse()操作,在该操作中将返回时间戳;)然后继续,就好像你收到了时间戳一样。
Date::getTimestamp
始终返回Unix时间戳。Unix时间戳不存储时区信息。
解决方案是根据服务器提供的日期信息构建JavaScriptDate对象。
注意:当服务器或客户端更改时区(即夏令时)时,时间不会不同步。如果避免对后端的请求,一个更准确的解决方案是使用JavaScript中的时区库(例如timezone.js)
PHP:
$date = new DateTime;
echo json_encode(array(
'year' => (int) $date->format('Y'),
'month' => (int) $date->format('m'),
'day' => (int) $date->format('j'),
'hours' => (int) $date->format('H'),
'minutes' => (int) $date->format('i'),
'seconds' => (int) $date->format('s'),
));
JavaScript:
var date = null;
function updateTime() {
if (!date) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "backend/time_backend.php?action=serverTime", false);
xmlhttp.send();
var j = JSON.parse(xmlhttp.responseText);
date = new Date(
j['year'], j['month'],
j['day'], j['hours'],
j['minutes'], j['seconds']
);
return;
}
// Increment time by 1 second
date.setTime(date.getTime() + 1000);
}
function clock() {
updateTime();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
hours = hours % 12;
hours = hours ? hours : 12; // the hour ’0' should be ’12'
minutes = minutes < 10 ? '0'+minutes : minutes;
seconds = seconds < 10 ? '0'+seconds : seconds;
var strTime = hours + ':' + minutes + ':' + seconds;
document.getElementById('clock').innerHTML = strTime;
}
window.onload = function() {
setInterval(clock, 1000);
};