作者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)
1F:推 StarTouching:喔对 我的确忘了这件事情 是我思考不周 受教了 感谢 10/27 00:25
2F:推 nightspirit:推month从0开始~ 之前也卡这边卡半天!!! 10/27 04:45
3F:推 LPH66:忘了 month 从 0 开始 +1 @@ (明明 C 也是这样定的却忘了..) 10/27 11:42
4F:推 StarTouching:其实主要是因为date从1开始算 所以就一时搞混忘了... 10/28 16:15
5F:→ StarTouching:有人知道date值是1-31而非0-30的原因吗? 10/28 16:16
6F:→ wxyy:我一直觉得 月份是 0-11 而 日期保持 1-31 的原因.. 10/29 13:47
7F:→ wxyy:是因为方便写程式的原因.. 10/29 13:48
8F:→ wxyy:月份在某些时候, 不是想显示数字, 而是月份的英文单字或缩写 10/29 13:48
9F:→ wxyy:这时候定义一个 var month = ['JAN', 'FEB', 'MAR',...] 10/29 13:50
10F:→ wxyy:显示月份的时候就使用 month[i] // i 就是月份的取到的值 10/29 13:51
11F:→ wxyy:因为这个原因, 所以一般取'年'跟'日'都会是原本想取得的数字 10/29 13:54
12F:→ wxyy:而'月份'跟'星期几' 这两个会是从 0 开始...方便显示的操作 10/29 13:55
13F:推 onininon:←曾经因为这个问题浪费一个下午 10/30 15:24