Javascript获取当前月份的最大天数

JAVASCRIPT获取前一天、后一天这篇日志中,简单介绍了Javascript时间日期对象Date的几种构造方法,其中有一种方法可以调用年、月(0-11)、日(1-31)、时(0-59)、分(0-59)、秒(0-59)、毫秒(0-999)参数来生成时间日期,其中年、月是必须的,其他可以选填。

1
2
3
4
5
//生成"2019-12-15 12:15:34.234"
var dt = new Date(2019,11,15,12,15,34,234);

//生成"2019-12-01 00:00:00.000"
var dt = new Date(2019,11);

当输入的参数的值超出该参数的取值范围时,构造方法会自动处理。

1
2
3
4
5
//生成"2020-01-01"
var dt = new Date(2019,12,1)

//生成"2019-02-04"
var dt = new Date(2019,0,35)

利用这个特性,就可以很方便的获取当前月份的最大天数,具体方法是传入月份值为下个月的月份值,日期值为0。因为日期值的范围是1-31,输入0,Date对象就会自动跳到上个月的最后一天,然后调用getDate()方法得到的就是当前月份的最大天数了。

1
2
3
//比如当前日期是"2019-12-14",执行后获取的maxDate值就是"31"
var dt = new Date("2019-12-14");
var maxDate = new Date(dt.getFullYear(),dt.getMonth()+1,0).getDate();

Javascript获取前一天、后一天

Javascript时间日期对象Date提供了十分方便的日期、时间构造方法,以及相当全面的获取、设置具体时间单位的值的方法。

构造方法

Javascript可以使用以下方法来构造一个时间日期对象:

1
2
3
4
5
6
7
8
9
10
11
12
13
//获取当前时间
var d = new Date();

//从1970年1月1日0时起的毫秒数
var d = new Date(milliseconds);

//时间日期字符串:"2019-12-14",或者"2019-12-14 13:23:41"
//支持的日期格式有:年-月-日、年/月/日、月-日-年、月/日/年
var d = new Date(dateString);

//按顺序依次输入年、月、日、时、分、秒、毫秒参数
//至少要输入year、month两个参数,后面的都是可选
var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);

常用取值、设值方法

Date对象提供了getFullYear()、getMonth()、getDate()、getHours()、getMinutes()、getSeconds()、getMilliseconds()七个方法来分别获取年、月(0-11)、日(1-31)、时(0-23)、分(0-59)、秒(0-59)、毫秒(0-999)的值,以及getDay()方法获取星期几(0-6)。

同时,提供了带UTC的八个方法getUTCFullYear()、getUTCMonth()、getUTCDate()、getUTCHours()、getUTCMinutes()、getUTCSeconds()、getUTCMilliseconds()、getUTCDay()用于获取世界时的年、月、日、时、分、秒、毫秒和星期几。

当然也提供了对应的set方法(除了星期几不能设置):setFullYear()、setMonth()、setDate()、setHours()、setMinutes()、setSeconds()、setMilliseconds(),setUTCFullYear()、setUTCMonth()、setUTCDate()、setUTCHours()、setUTCMinutes()、setUTCSeconds()、setUTCMilliseconds()。

另外,还有可以把时间转换为1970年1月1日起始的毫秒数(以下简称毫秒数)的方法getTime(),相应的方法UTC()则是根据世界时返回毫秒数。perse()方法可以把指定的时间日期字符串转换成毫秒数。

使用get、set方法,可以很方便的获取某个日期的前一天、后一天,当然,前一月、后一月,前几天、后几天,前几秒、后几秒,前几年、后几年,都是一样的道理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var dt = new Date();

//设置日期为下一天,时分秒等不变
dt = dt.setDate(dt.getDate() + 1);

//设置月份为上一月,如果date值大于当前月最大值,多出来的天数会变成当前月份的date值
//比如当前日期是2019-03-03,执行后就变成2019-02-03
//比如当前日期是2019-03-31,执行后就变成2019-03-03
dt = dt.setMonth(dt.getMonth() - 1);

//设置年份为十年后,也有例外情况,闰年的2月29日,增减年份到非闰年,会变成3月1日
dt = dt.setFullYear(dt.getFullYear() + 10);

//设置时间为50秒后
dt = dt.setSeconds(dt.getSeconds() + 50);

Date对象会自动处理超出范围的数据,使用起来非常方便。

常用转换字符串方法

toDateString() 把 Date 对象的日期部分转换为字符串。
toISOString() 使用 ISO 标准返回字符串的日期格式。
toJSON() 以 JSON 数据格式返回日期字符串。
toLocaleDateString() 根据本地时间格式,把 Date 对象的日期部分转换为字符串。
toLocaleTimeString() 根据本地时间格式,把 Date 对象的时间部分转换为字符串。
toLocaleString() 据本地时间格式,把 Date 对象转换为字符串。
toString() 把 Date 对象转换为字符串。
toTimeString() 把 Date 对象的时间部分转换为字符串。
toUTCString() 根据世界时,把 Date 对象转换为字符串。