2014-03-03 33 views
2

我製作了一小段代碼片段。告訴你你多大了,到第二個。我們在12月(夏令時)獲得了一個小時

但我發現了一些奇怪的東西。我知道時間和時區是一個噩夢,但這屬於我自己的國家和時區,所以我有點困惑。

如果我輸入日期。 27-12-2013(DD-MM-YYYY),它會顯示:

Right time

這是正確的。現在的時間是08:42。該getTimezoneOffset() is -60

但是,如果我回去了一天,它會顯示這樣的:

Wrong time

它增加了一小時!?這是它發生的唯一日期,我有點困惑,因爲夏令時只適用於春季和秋季。 getTimezoneOffset() is ALSO -60

希望您能對此有所瞭解。

時區http://www.timezoneconverter.com/cgi-bin/zoneinfo?s=standard&tz=Europe/Copenhagen 的Javascript:GMT + 0100(浪漫標準時間)
國家:丹麥
的jsfiddlehttp://jsfiddle.net/d6kBJ/4/

var $output = $(".js-ageoutput"); 
var bd = new Date(2000, 0, 01); 
bd.setHours(0); 
bd.setMinutes(0); 
bd.setSeconds(0); 

function showTotalAge() { 
    var ageDifMs = Date.now() - bd.getTime(); 
    var ageDate = new Date(ageDifMs); // miliseconds from epoch 
    displayAge(ageDate) 
    loopAge(); 
} 

function displayAge(age) { 
    var yearOld = Math.abs(age.getFullYear() - 1970); 
    var months = age.getMonth(); 
    var days = age.getDate() - 1; 
    var h = age.getHours() - 1; 
    var m = age.getMinutes(); 
    var s = age.getSeconds(); 
    $output.html(yearOld + ' years <br/>' + months + ' months <br/>' + days + ' days <br/>' + h + 'hours <br/>' + m + ' minutes <br/>' + s + ' seconds<br/>'); 
} 

function loopAge() { 
    setTimeout(showTotalAge, 1000); 
} 
loopAge(); 

$(".js-birthday").change(function() { 
    var vArr = $(this).val().split('-'); 
    bd = new Date(vArr[0], parseInt(vArr[1], 10) - 1, vArr[2]); 
    bd.setHours(0); 
    bd.setMinutes(0); 
    bd.setSeconds(0); 
    console.log(bd); 
}); 
+0

沒有什麼可以理解的。只需創建一個Date對象並檢查getTimezoneOffset是否返回。儘管對我來說似乎很奇怪,但至少在十月份會發生 - 至少對於歐洲國家來說。 – MaxArt

+0

@MaxArt,你怎麼看? Theres很多理解。這很奇怪,也是你的「建議」,它使得它更加怪異,偏移量也完全相同。兩個日期抵消是'-60' –

回答

3

有更深入的檢查後,您的代碼,這是你的錯誤:

var ageDate = new Date(ageDifMs); 

的一點是:從未創建Date對象了日期的差異,因爲這將毫無意義。你得到的是一個Date對象,代表UTC 1970年1月1日之後的瞬間ageDifMs毫秒,這就是getMonth,getDate,, getHours等等所指的方法。

所以,你得到了一個像1970年3月28日那樣的日期,那就是夏令時發生的時間。

如果你想知道兩個日期在月份和日期等方面的差異,你可以計算getMonth和其他方法的結果差異,或者修改一年的時間,一個月並使用模數和分度計算單個值。

另外,您寧願使用setInterval而不是setTimeout來執行定時連續任務。

+0

非常好的接收!你是完全正確的,我不能相信我沒有想過這件事......最後一部分,我知道。謝謝你的時間:) –

+0

@AndréSnedeHansen不客氣:) – MaxArt