2014-07-03 87 views
0

我正在使用日曆插件,並且該插件有幾個回調事件,允許您自定義用戶單擊日期時發生的情況等。設置此的一種方法是對我而言,如下:Javascript日期對象和Date.prototype自定義

onDayClick: function(e) { 
    window.location.href = 'http://www.testdomain.com/events/day/' + e.data.date; 
} 

.datedate object如此,如果點擊,例如,將返回:

http://www.testdomain.com/events/day/Thu Jun 2012 2014 2000:00:00 GMT+0100 (BST)

我需要的是期望的輸出:

http://www.testdomain.com/events/day/2014/07/17/並查看了日期對象文檔,我認爲這相當簡單。

Date.prototype.GetCustomFormat = function() { 
    return this.getFullYear()+'/'+getInTwoDigitFormat(this.getMonth())+'/'+getInTwoDigitFormat(this.getDate()); 
}; 
function getInTwoDigitFormat(val) { 
    return val < 10 ? '0' + val : val; 
} 

onDayClick: function(e) { 
    window.location.href = 'http://www.testdomain.com/events/day/' + e.data.date.GetCustomFormat(); 
} 

但是,這是什麼帶來回來,當點擊,是正確的一年......但錯誤的月份1和錯誤的日期幾天。奇怪的。所以我增加了一些門店並增加了一個UTC月...

return this.getFullYear()+'/'+getInTwoDigitFormat(this.getUTCMonth()+1)+'/'+getInTwoDigitFormat(this.getDate()); 

這似乎現在工作。但是,如果我有一次登陸的事件...它使用前一個月的第一個事件。所以,如果我點擊7月1日,它將返回6月1日。

我想我正在抓住它......但這裏和那裏有一些奇怪的結果。任何人都可以發現我出錯的地方,並讓我正確嗎?

感謝

+0

奇怪的部分是它也帶來了錯誤的一天。預計該月爲-1,因爲其零指數。 – DontVoteMeDown

+0

因爲這是UTC月份,假設你在7月1日_MMT + 0100_ _midnight_,那麼UTC月份會少一點是不正常的呢? –

回答

1

這個解釋很簡單:因爲你是1小時比UTC的,在午夜在7月1日,UTC仍然在六月!這就是爲什麼它使用UTC月份輸出6月1日。使用UTC月份而不是UTC年份和日期沒有太大意義,所以相反,只需使用常規月份:

Date.prototype.GetCustomFormat = function() { 
    return this.getFullYear()+'/'+getInTwoDigitFormat(this.getMonth()+1)+'/'+getInTwoDigitFormat(this.getDate()); 
}; 
var testerDate = new Date(Date.parse("Thu Jun 1 2012 00:00:00 GMT+0100")) 
testerDate.GetCustomFormat() //The output of this depends on your time zone: It'll be 2012/06/01 if in or ahead of GMT+0100, but otherwise, it'll be 2012/05/31. 
+0

你知道......我確信我原來是這樣的,但沒有奏效。但唉,它有:)謝謝你的重申。 –