<script type="text/javascript">
//Live Javascript Server Time
function getthedate(city, offset){
// create Date object for current location
d = new Date();
// convert to msec
// add local time zone offset
// get UTC time in msec
utc = d.getTime() + (d.getTimezoneOffset() * 60000);
// create new Date object for different city
// using supplied offset
nd = new Date(utc + (3600000*offset));
var hours = nd.getHours()
var minutes = nd.getMinutes()
var seconds = nd.getSeconds()
var dn="AM"
if (hours>=12)
dn="PM"
if (hours>12){
hours=hours-12
hours="0"+hours
}
if (hours==0)
hours=12
if (minutes<=9)
minutes="0"+minutes
if (seconds<=9)
seconds="0"+seconds
var cdate="<strong><font color='b9b9b9' size='1'> "+hours+":"+minutes+":"+seconds+" "+dn+"</font></strong>"
if (document.all)
document.all.clock.innerHTML=cdate
else if (document.getElementById)
document.getElementById("clock").innerHTML=cdate
else
document.write(cdate)
}
if (!document.all&&!document.getElementById)
getthedate()
function live_servertime(){
if (document.all||document.getElementById)
setInterval("getthedate()",1000)
}
// get London time
alert(getthedate('London', '+1')); </script>
嘿。我想在一个简单的浏览器实时脚本上使用这个hack来显示服务器的实时时间(如果我知道它的时区/ utc偏移量):Javascript hack link
但是,使用我上面的代码,显示的所有内容都是: NaN:NaN:Nan AM 有谁知道如何使这项工作?
答案 0 :(得分:0)
我没有得到NaN:NaN:Nan AM
或类似的东西,它似乎对我有用。
但是你的代码中存在一些缺陷。首先,始终使用var
在本地声明变量。现在,您将在全局命名空间中静默覆盖d
,utc
和nd
。
其次,这很可能不是你想要的:
if (hours>12){
hours=hours-12
hours="0"+hours
}
如果在晚上10点到午夜之间,您不希望在小时之前添加0
。此外,在上午10点之前不会添加0
。
您可能想在<{1}}条件
之外hours>12
此外,你做
if (hours<=9)
hours="0"+hours;
if (document.all)
document.all.clock.innerHTML=cdate
非常旧,您don't have to use it anymore!即使IE 6也了解标准document.all
。
document.getElementById
始终尝试向setInterval("getthedate()",1000)
和setInterval
提供函数而不是字符串。引用MDC:
建议不要使用此语法,原因与使用eval()
相同
最后,但并非最不重要的是,使用适当的缩进并在每个声明后加上分号;引用Douglas Crockford:
JavaScript使用类似C语法的语法 需要使用分号 划界陈述。 JavaScript的 尝试使分号可选 用分号插入机制。 这很危险。
与C一样,JavaScript有
setTimeout
和++
和--
运营商可以 前缀或后缀。该 消除歧义是由 分号。在JavaScript中,可以使用换行符 空白或它可以作为一个 分号。这取代了一个歧义 与另一个人。
JSLint期望每个语句都是 其次是
(
,;
除外,for
,function
,if
,switch
和try
。 JSLint不希望看到 不必要的分号或空的 言。
按照你编写的方式跟踪代码很难;例如,我困惑自己认为你的条件while
在AM / PM条件下。