看板 Ajax 關於我們 聯絡資訊
※ 引述《StarTouching (撫星)》之銘言: : 我發現有個方法是 : new Date(year, month, 0).getDate() 這裡有個trick 可能其他人沒看見的地方是 假設你要查 2011/10 (year = 2011 , month = 10) 事實上 new Date( 2011,10,0) 是 2011/11/0 的意思 (記得month 在api中是從0開始嗎 ) 也就是2011/10/最後一天 但是如果你assume 這裡的month 變數是從 0開始 (也就是2011/10 你給 year= 2011,month = 9 ) 那你一樣會拿到上個月的日期 這是要小心的 : 註: 和 setDate(0) 效果不同 每次call setDate(0) 都會移到當前月份的上個月的日期, 而且它是每次call都會改變 我不確定你說效果不同是用什麼方式做比較 但是 var d = new Date( 2011,10,1); d.setDate(0); 跟 var d = new Date( 2011,10,0); 會拿到一樣的結果哦 :P Mon Oct 31 2011 00:00:00 GMT+0800 (Taipei Standard Time)} setDate 還有一個要小心的地方, 重複call同樣的setDate(0)是會改變狀態的。 var d = new Date( 2011,10,1) d.setDate(0); //d = Mon Oct 31 2011 d.setDate(0); //d = Mon Sep 31 2011 : 不過w3schools好像也沒提到這件事情 : 很好奇這是正規的方法嗎? : 還是很可能因瀏覽器而異? 這是spec 上規定的事情,不太可能因為瀏覽器而異, 不過我覺得你這樣的描述並沒有掌握到它真正會這樣作得理由, 你只知道有這件事,但不知道為什麼。XD 這篇文章應該解釋的有比較清楚一點, 總之 date = 0 表示是要找上個月的最後一天。 然後處理日期操作時一定要特別小心 month 是從0 開始這件事 -- 網頁上拉近距離的幫手 實現 GMail豐富應用的功臣 數也數不清的友善使用者體驗 這就是javascript 歡迎同好到 AJAX 板一同討論。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 208.54.86.187 ※ 編輯: TonyQ 來自: 208.54.86.187 (10/27 00:18)
StarTouching:喔對 我的確忘了這件事情 是我思考不周 受教了 感謝 10/27 00:25
nightspirit:推month從0開始~ 之前也卡這邊卡半天!!! 10/27 04:45
LPH66:忘了 month 從 0 開始 +1 @@ (明明 C 也是這樣定的卻忘了..) 10/27 11:42
StarTouching:其實主要是因為date從1開始算 所以就一時搞混忘了... 10/28 16:15
StarTouching:有人知道date值是1-31而非0-30的原因嗎? 10/28 16:16
wxyy:我一直覺得 月份是 0-11 而 日期保持 1-31 的原因.. 10/29 13:47
wxyy:是因為方便寫程式的原因.. 10/29 13:48
wxyy:月份在某些時候, 不是想顯示數字, 而是月份的英文單字或縮寫 10/29 13:48
wxyy:這時候定義一個 var month = ['JAN', 'FEB', 'MAR',...] 10/29 13:50
wxyy:顯示月份的時候就使用 month[i] // i 就是月份的取到的值 10/29 13:51
wxyy:因為這個原因, 所以一般取'年'跟'日'都會是原本想取得的數字 10/29 13:54
wxyy:而'月份'跟'星期幾' 這兩個會是從 0 開始...方便顯示的操作 10/29 13:55
onininon:←曾經因為這個問題浪費一個下午 10/30 15:24