作者TonyQ (自立而後立人。)
看板Ajax
標題Re: [問題] javascript取得月份天數的方法
時間Thu Oct 27 00:04:41 2011
※ 引述《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