JS中Date对象中几个用法

近来工作中遇到这样的两个需求

1. 给个Date对象,找出该时间所在月的第一天和最后一天

2. 给个Date对象,找出该时间所在周的第一天和最后一天

 

需求1中的找月第一天很简单,我记得api中有setDate方法可以使用

使用setDate方法前,先看看getDate

var date = new Date();
console.log(date);
// Sat Jul 18 2015 16:55:23 GMT+0800 (China Standard Time)

date.getDate();
// 18

可见getDate返回的是一个月中的第几天(从1开始)

这就好办了。通过setDate(1) 天设为第一天就好了(返回的是毫秒数)

new Date(date.setDate(1));
// Wed Jul 01 2015 16:55:55 GMT+0800 (China Standard Time)

返回的当月第一天

那么最后一天怎么办,哈哈,取月,看本月多少天,如果是2月还要判断是否是闰年。麻烦。其实再使用setDate的参数是从0开始的,结果出现的这个情况

var date = new Date();
console.log(date);
// Sat Jul 18 2015 17:07:48 GMT+0800 (China Standard Time)
console.log(new Date(date.setDate(0)));
// Tue Jun 30 2015 17:07:48 GMT+0800 (China Standard Time)

 

设置setDate(0)之后不是刚开始想的本月第一天,而是上个月最后一天(以前不知道啊)
然后就想到了这个办法

var date = new Date();
console.log(date);
// Sat Jul 18 2015 17:11:31 GMT+0800 (China Standard Time)
console.log(new Date(date.setMonth(date.getMonth() + 1, 0)));
// Fri Jul 31 2015 17:11:31 GMT+0800 (China Standard Time)

 成功得一个月的最后一天,

如果设置setDate(-1)将得到上个月倒数第二天

var date = new Date();
console.log(date);
// Sat Jul 18 2015 17:18:14 GMT+0800 (China Standard Time)
console.log(new Date(date.setDate(-1)));
// Mon Jun 29 2015 17:18:14 GMT+0800 (China Standard Time)

 

 

月的第一天最后一天是找着了。那周的第一天和最后一天呢?
javascript中是提供了getDay方法,没有提供setDay方法啊,没关系,一周总共7天不会变,不用一个月,有时30天,有时31天,还有28,29天

getDay返回值是0(周日)—— 6(周六)
如此可用如下方法

 

 

var date = new Date();
console.log(date);
// Sat Jul 18 2015 17:24:27 GMT+0800 (China Standard Time)

console.log(new Date(date.getTime() - 86400000 * date.getDay()));
// Sun Jul 12 2015 17:24:27 GMT+0800 (China Standard Time)

console.log(new Date(date.getTime() + 86400000 * (6 - date.getDay())));
// Sat Jul 18 2015 17:24:27 GMT+0800 (China Standard Time)

 

如此就解决的上面的问题了

 

ps: 后来又尝试了setMonth()中参数的设置 0(1月) —— 11(12月)
如果设置-1,-2 或者13呢?

var date = new Date();
console.log(date);
// Sat Jul 18 2015 17:31:18 GMT+0800 (China Standard Time)

console.log(new Date(date.setMonth(-1)));
// Thu Dec 18 2014 17:31:18 GMT+0800 (China Standard Time)

 可见返回了去年的最后一个月(12月), 如果设置-2则是返回去年倒数第二个月(11月)

var date = new Date();
console.log(date);
// Sat Jul 18 2015 17:34:33 GMT+0800 (China Standard Time)

console.log(new Date(date.setMonth(12)));
// Mon Jan 18 2016 17:34:33 GMT+0800 (China Standard Time)

 

设置12则返回了下一年的第一个月(1月),如果设置13返回下一年的第二个月(2月)

 

吐槽一下:

为什么getMonth, getDay, getHours, getMinutes, getSeconds, getMillseconds返回值都是从0开始,而偏偏getDate返回值是从1开始,这么特殊

 

你可能感兴趣的:(JavaScript,Date,最后一天)