我有一个关于javascipt日期的问题,我按照w3school中的示例获取时钟,它会自动刷新,它工作正常,但它显示我本地的当前时间,这是我不想要的。
相反,我希望它显示我的服务器时间,因为该程序将在我的服务器中运行,因此如果我输入以下内容,则在 java 中:
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
formatter.format(new java.util.Date())
它实际上会获取服务器时间。我想知道为什么下面的代码会得到我的区域设置时间(我的电脑时间,而不是我的服务器时间),即使我更改为 var t = d.toString();
var myVar = setInterval(function(){ myTimer() }, 1000);
function myTimer() {
var d = new Date();
var t = d.toLocaleString();
document.getElementById("demo").innerHTML = t;
}
最佳答案
I wonder why the following code will get my locale time(my pc time, not my server time) even i change to var t = d.toString()
因为d
仍然是客户端 JavaScript Date
对象,以及两者toLocaleString
和toString
返回客户端时区的时间。
如果您想显示服务器的时间,您需要确定客户端时区和服务器时区之间的差异,然后应用该差异。一种相当精确但并不完美的方法是让服务器端代码输出 JavaScript 代码,该代码返回从服务器发送页面时的服务器时间:
<script>
<% // Server-side code
Calendar serverDate = Calendar.getInstance();
%>
var d = new Date(
<%=serverDate.get(Calendar.YEAR)%>,
<%=serverDate.get(Calendar.MONTH)%>,
<%=serverDate.get(Calendar.DAY_OF_MONTH)%>,
<%=serverDate.get(Calendar.HOUR_OF_DAY)%>,
<%=serverDate.get(Calendar.MINUTE)%>,
<%=serverDate.get(Calendar.SECOND)%>
);
var delta = d.getTime() - Date.now();
</script>
请注意如何使用 JSP 将数字输出到 JavaScript 代码。浏览器会看到类似这样的内容:
<script>
<% // Server-side code
Calendar serverDate = Calendar.getInstance();
%>
var d = new Date(
2014,
11,
23,
9,
54,
27
);
var delta = d.getTime() - Date.now();
</script>
(请注意,我假设上面是公历或儒略历;如果是这样, Calendar
的月份字段将为 0 = 一月,这正是 JavaScript 所期望的。)
结果delta
是服务器时间和客户端时间之间的差异(以毫秒为单位),这意味着您可以随时在客户端上执行此操作以显示服务器时间:
var d = new Date(Date.now() - delta);
我认为我的做法是正确的。 :-) 如果没有,那就是+ delta
.
关于关于时钟的javascript和java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27617349/