2017-07-25 55 views
-1

当打印时钟的时间时,类似的代码工作并针对所选时区进行调整,但这不适用于打印日期。任何想法为什么?为什么日期不适合UTC设置的时间?

它只显示UTC默认时间。

<script> 
    function cetDT(){ 

var now = new Date(); 
var today = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds()); 

var day = today.getDate(); 
var month = today.getMonth(); 
var year = today.getFullYear(); 

var anHour = 1000 * 60 * 60; 
today = new Date(today.getTime() - anHour * -2); 

var hours = today.getHours(); 
var minutes = today.getMinutes(); 
var seconds = today.getSeconds(); 

if (hours >= 12){ 
meridiem = ""; 
} 
else { 
meridiem = ""; 
} 


if (minutes<10){ 
minutes = "0" + minutes; 
} 
else { 
minutes = minutes; 
} 

if (seconds<10){ 
seconds = "0" + seconds; 
} 
else { 
seconds = seconds; 
} 

document.getElementById("cetDT").innerHTML = (day + '/' + (parseFloat (month) + 1) + '/' + year); 

} 

cetDT(); 
</script> 
+1

您正在使用'now.getUTCDate()'和'now.getUTCHours()',它将获取UTC中的当前日期和时间。 'getDate','getHours'等将获取与时区相关的时间。 –

+0

但是我也在稍后用“today = new Date(today.getTime() - anHour * -2);”来修改它。或者至少我在尝试....任何建议? – ebkod

+0

这段代码有很多错误的东西。你究竟在努力完成什么? –

回答

1

您使用now.getUTCDate()now.getUTCHours()相似,这将抢UTC的当前日期和时间。

要获得本地等价物,您需要寻找now.getDate()now.getHours()等。请注意名称中缺少'UTC'。

请注意,即使你更新today变量与today = new Date(today.getTime() - anHour * -2)today较早与UTC时间草签。因此,getTime()将相对于UTC。

要解决这个问题,所有你需要做的是换出的UTC时间:

function cetDT() { 

    var now = new Date(); 
    var today = new Date(now.getFullYear(), now.getMonth(), now.getDate(), now.getHours(), now.getMinutes(), now.getSeconds()); 

    var day = today.getDate(); 
    var month = today.getMonth(); 
    var year = today.getFullYear(); 

    var anHour = 1000 * 60 * 60; 
    today = new Date(today.getTime() - anHour * -2); 

    var hours = today.getHours(); 
    var minutes = today.getMinutes(); 
    var seconds = today.getSeconds(); 

    if (hours >= 12) { 
    meridiem = ""; 
    } else { 
    meridiem = ""; 
    } 


    if (minutes < 10) { 
    minutes = "0" + minutes; 
    } else { 
    minutes = minutes; 
    } 

    if (seconds < 10) { 
    seconds = "0" + seconds; 
    } else { 
    seconds = seconds; 
    } 

    document.getElementById("cetDT").innerHTML = (day + '/' + (parseFloat(month) + 1) + '/' + year); 

} 

cetDT(); 

请注意,这里还有代码几位是完全多余的,比如else { seconds = seconds; }。你不妨考虑重构这段代码;)

希望这有助于! :)

+0

非常感谢!解决了它。 – ebkod

+0

所以当换掉UTC时间时,我必须指定一个时区,如果我是正确的?我非常抱歉听起来像这样一个初学者,但我一直在研究这个代码,我不明白要更换时区需要替换什么。 – ebkod

+0

尽管问题不大,但请注意,最好在整个过程中使用基于UTC的函数,而不是基于本地时间的函数。你说得对,他们需要一直使用,但本地时间功能将始终承担本地时区的行为,包括任何有效的夏令时规则。由于OP似乎希望从UTC转移固定的小时数,所以应该使用UTC作为基础。 –

相关问题