我有一系列年,月开始日和结束日选择元素.. 几年和几个月可用,但问题在于选择的月份的天数,作为开始日期!
我在JS文件中使用它
days = new Date(2010, 4, 0).getDate(); // returns 29
,应该是30!
问题出在哪里,我通过php cal_days_in_month(0,4,20010)确认每个月的日子,返回30
提前致谢:)
答案 0 :(得分:1)
如果你只是接受日期是1,那么一个小技巧会给你一个月的天数:
function getDaysForMonth(m,y){
var datebase = new Date(y,m,1); //nb: month = zerobased
datebase.setDate(datebase.getDate()-1);
return datebase.getDate();
}
让我们来看看februari:
var feb2000 = getDaysForMonth(2,2000); //=> 29
var feb2004 = getDaysForMonth(2,2004); //=> 29
var feb2008 = getDaysForMonth(2,2008); //=> 29
var feb2010 = getDaysForMonth(2,2010); //=> 28
您可以为它制作Date.prototype方法:
Date.prototype.daysThisMonth = function(){
var x = new Date(this.getFullYear(),this.getMonth()+1,1);
x.setDate(x.getDate()-1);
return x.getDate();
};
//usage
var d1 = new Date('2010/2/23').daysThisMonth() //=> 28
//nb new Date('2010/2/23') in your notation: new Date(2010,1,23)
答案 1 :(得分:0)
我使用date.js。它有许多方便的日期功能。
答案 2 :(得分:0)
您的代码
new Date(2010, 4, 0)
...不正确;它可能在某些实现中有效但在其他实现中则无Date
构造函数需要年,月,日,小时,分钟和秒(除year
和month
之外的所有内容都是可选的,因为如果使用单参数构造函数,它会假定您'给出一个毫秒 - 自 - 时代的价值),月是从0开始的,但是日是基于1的(是的,真的 - 嘿,我没有设计它)。因此,4月1日是new Date(2010, 3, 1)
(0
= 1月,1
= 2月,2
= 3月,3
= 4月)并且没有日期 - 月0
(根据规范第15.9.1.5节,范围是1..31)。
答案 3 :(得分:0)
在谷歌浏览器中,它只输出30:
document.write(days = new Date(2010,4,0).getDate());
答案 4 :(得分:0)
确保您使用下个月作为参数,因为它在日期为0时向后移动:
new Date(2012, 1, 0); //returns Jan not Feb
如果您经常使用此功能,请创建一个功能
function getDaysOfMonth(year, month){
return new Date(year, month+1, 0).getDate()
}