😎 生活,要有仪式感!
😂 我应该不是最后一个知道怎么获取当月最后一天吧!
这篇文章带你领略 Date
的魅力,秒懂获取最后一天,几天后,几个月后,几年后的方式,简单易懂!😄
如果你已经了解了 Date
的用法可以直接看这里 传送门: ⭐️重点在这里
Date 对象
一个 JavaScript Date
实例,呈现时间中的某个时刻。Date
对象则基于 Unix Time Stamp
,即自1970年1月1日 08:00:00(UTC)
起经过的毫秒数。
从 1970
开始,那是不是不能表示 1970
年之前的时刻啊?
怎么可能😂!之前的时刻也是可以表示的,只不过得到的时间戳是负数罢了~
创建 Date 实例
Date
实例只能通过 new
关键字创建,如果直接调用 Date()
则返回的是字符串 (String)
,而非对象哦:
let date = new Date() //return Date object
// Sat Oct 24 2020 20:15:20 GMT+0800 (中国标准时间)
let date1 = Date() // return String
// "Sat Oct 24 2020 20:15:20 GMT+0800 (中国标准时间)"
当然,new出来的Date实例就可以使用Date的方法,Date() 得到的字符串就是普通的字符串!
Date() 构造函数的四种基本形式
new Date();
new Date(value);
new Date(dateString);
new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);
不慌,一个个看:
1. 无参数
这个最简单,就是返回当前的时刻。
new Date()
//Sat Oct 24 2020 20:33:25 GMT+0800 (中国标准时间)
2. value
这里的 value
我的理解指的是日期值,可以是能被解析的时间戳、Date
实例
new Date(1603542929950)
//Sat Oct 24 2020 20:35:29 GMT+0800 (中国标准时间)
new Date(new Date())
//Sat Oct 24 2020 20:35:46 GMT+0800 (中国标准时间)
3. dateString
🚫 不推荐使用:由于浏览器之间的差异与不一致性,强烈不推荐使用 Date 构造函数来解析日期字符串
这里的 dateString
指的就是任何可以被解析的字符串形式日期,形式也比较多。
注意 new Date('2020-10-31')
和 new Date('2020-10-31 ')
在时间上的区别就可以了。
new Date('2020') //缺省月日,默认都是1
// Wed Jan 01 2020 08:00:00 GMT+0800 (中国标准时间)
new Date('2020-10-31') //缺省时间,(中国)默认是 08:00:00
//Sat Oct 31 2020 08:00:00 GMT+0800 (中国标准时间)
new Date('2020-10-31 ')//注意多了个空格;缺省时间,返回 00:00:00
//Sat Oct 31 2020 00:00:00 GMT+0800 (中国标准时间)
new Date('2020-10-31 00:00:00') //返回指定的时间;和上面的写法等效
//Sat Oct 31 2020 00:00:00 GMT+0800 (中国标准时间)
new Date('2020-10-31 12:12:12') //返回指定的时间
//Sat Oct 31 2020 12:12:12 GMT+0800 (中国标准时间)
4. 7个参数
👍 推荐使用,用了都说好!
最多可以接受 7 个参数:
year
表示年份的整数值。 0到99会被映射至1900年至1999年,其它值代表实际年份。
monthIndex
表示月份的整数值,从 0(1月)到 11(12月),注意从0开始就好了!
除了上面的年月参数,下面的参数都是可选的 (默认是0,日期是1):
date
表示一个月中的第几天的整数值,从1开始。默认值为1
hours
表示一天中的小时数的整数值 (24小时制)。默认值为0(午夜)
minutes
表示一个完整时间(如 01:10:00)中的分钟部分的整数值。默认值为0
seconds
表示一个完整时间(如 01:10:00)中的秒部分的整数值。默认值为0
milliseconds
表示一个完整时间的毫秒部分的整数值。默认值为0,用的不多。
说了老半天,终于来到正题了!
⭐️ 重点在这里
嘿嘿!不知道你有没有试过传入 超出的范围
的日期数据会怎样?
哈哈!是不是突然就 悟了!
最后一天方法很简单:本月最后一天 === 下个月第 0 天
new Date(2020, 0, 0)
//Tue Dec 31 2019 00:00:00 GMT+0800 (中国标准时间)
当然同理,80秒后,90分钟后,30小时后,60天后,10个月后,3年后都是可以直接加上去的,用起来是不是真就那么地丝滑😄~
简单的使用场景
1. 实习期/试用期
// 根据入职日期和试用期计算转正日期,要求:入职日期 + 试用期
let staff = {
entryDate: '2020-09-10',//入职日期
probation: '6个月' //试用期
}
let entryDate = new Date(staff.entryDate), // 获取入职日期
probation = staff.probation.substring(0, staff.probation.length - 2) //截取月份数字
staff.regularDate = new Date(
entryDate.getFullYear,
entryDate.getMonth + Number(probation),
entryDate.getDate()) //转正日期,注意相加的时候要转成数字
2. 劳动合同
// 根据计算合同到期时间,要求:签订日期 + 年限 - 1天
let contract= {
contractStartDate: '2020-09-10',//合同签订日期
contractPeriod: '5年' //合同年限
}
let contractStartDate = new Date(staff.entryDate), // 获取合同签订日期
contractPeriod = staff.probation.substring(0, staff.probation.length - 1) //截取年份数字
contract.contractEndDate = new Date(
entryDate.getFullYear + Number(contractPeriod),
entryDate.getMonth,
entryDate.getDate() - 1) //获取合同到期日期