本文介绍一个通过javascript提供的Date对象来获取某一个月的具体天数。

要获取某一个月的具体天数这个问题看似简单,其实是隐含着一些坑的,比如有的月份是31天,有的则是30天,二月份的天数则还需要根据所属年份是不是闰年来判断是28天还是29天。

不过幸好javascript的Date对象可以帮助我们比较轻松的解决这个问题:

Date对象具有一个构造函数,一般我们都是这样使用的:

var date = new Date();
//Sun Jan 07 2018 10:41:00 GMT+0800 (中国标准时间)

当无参调用Date的构造函数时,会获得一个值为当前系统时间的Date对象,不过这个构造函数还可以接受参数,用来获取由参数指定的Date对象,比如:

//指定年、月、日
var date = new Date(2018,0,7);
//Sun Jan 07 2018 00:00:00 GMT+0800 (中国标准时间)

//指定年、月、日、时、分、秒
date = new Date(2018,0,7,8,30,50);
//Sun Jan 07 2018 08:30:50 GMT+0800 (中国标准时间)

其中月份这个参数比较特殊,从从0开始计数的,因此月份的范围是0~11,当然这并不是代表你只能传递0~11这个范围内的月份作为参数,相反,你可以传递诸如15或者-1这样的参数作为月份,而Date方法将会在当前年份上自动向前或向后定位,比如-1就意味着上一年的最后一月,而日期参数则是从1~31,同月份一样,也可以传递1~31范围之外的值,十分灵活。

而本文正是介绍如何借助Date方法这种灵活性,来实现动态获取一个月份的具体天数的方法,而且代码非常简洁,仅用4行代码就足够,如下:

function getDates(year,month){
    var date = new Date(year,month,0);
    return d.getDate();
}

解释一下原理:
比如传递了(2018,1)这两个参数,这意味着需要获取2018年1月份的天数,然后在getDate方法中首先是构造了一个Date对象,采用了带参构造的方式,传递了(2018,1,0)这三个参数。

之前介绍过Date构造函数的参数,年份不用说,月份的参数是从0开始,因此传递1作为月份,则代表将获取到的是2月份,而日期的参数是从1开始,因此传递0将获取到的是所传月份的上一个月的最后一天,这是一个相对的结果,比如(2018,1,0)这三个参数就将获取到2018年1月31日日期对象,(2018,2,0)这三个参数就将获取到2018年2月28日的日期对象,(2018,4,0)这三个参数就将获取到2018年4月30日的日期对象。

最后再通过Date对象的getDate()方法,获取当前调用日期对象在其月份下的日期序号,由于生产的日期对象是所传参数月份的最后一天,因此这一天的日期序号也就等于该月份的天数了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注