在javascript时间函数中使用本地时间转换时出错

时间:2010-08-15 08:11:13

标签: javascript date

<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 有谁知道如何使这项工作?

1 个答案:

答案 0 :(得分:0)

我没有得到NaN:NaN:Nan AM或类似的东西,它似乎对我有用。

但是你的代码中存在一些缺陷。首先,始终使用var在本地声明变量。现在,您将在全局命名空间中静默覆盖dutcnd

其次,这很可能不是你想要的:

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期望每个语句都是   其次是(;除外,   forfunctionifswitch和   try。 JSLint不希望看到   不必要的分号或空的   言。

按照你编写的方式跟踪代码很难;例如,我困惑自己认为你的条件while在AM / PM条件下。