显示服务器时间,包括时区偏移
show server time including timezone offset
我在使用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);
};
相关文章:
- SignalR:调用集线器方法时出现内部服务器错误
- 从安卓设备将图像上传到服务器时,文件扩展名错误
- NodeJS服务器在检索部分时返回505/404错误
- "无法获取/null”;当使用nodejs运行服务器时
- 当eval只执行服务器端数据时,在javascript中使用eval是否安全
- Node.js服务器问题-已添加“/"在浏览器中查找文件时
- 如何在服务器仍在处理以前的请求时对ajax请求进行排队
- 在部署ckeditor时,我需要包括插件文件夹吗
- 显示服务器时间,包括时区偏移
- 如何离线存储数据库,在线时共享到服务器
- 在进行服务器端渲染时,我可以向客户端发送React组件吗
- 有没有一种方法可以在服务器端页面加载之前在加载时运行javascript
- 引导程序's的javascript在本地工作,但在部署到服务器时不能工作
- 在服务器上通过jQueryAjax上传加载的图像时出现问题
- Python本地服务器问题:通过ajax发布时,rfile被截断
- Python在尝试保存新的JSON文件时导致服务器错误
- 当对象从服务器发送到客户端时,JS原型方法消失了
- 当服务器从 http 更改为 https 时,有哪些可能的方法可以解决问题
- 我如何发送参数到php脚本(ajax),使他们将包括在服务器端
- 如何获取页面加载事件时服务器上的客户机机器时间