2.日历选择器

首先我们想一下我们平常看到的日历选择器,通常头部会有一个星期几表头,下面就是日期,而日期下面通常会有1号,1号前面应该有一些上个月的日期,而最后一天后面还应该有下一个月的日期。

对于日期相关处理,JavaScript 提供了 Date 对象。

getDate 获得一个月的第几天
getDay 获得一个星期的第几天 (0 - 6)
getMonth  获取月份 (0 - 11)
getFullYear 获取年份

而对于比较 Date 对象的构造器有一个非常有意思的地方,那就是越界了之后,Date 会帮你自动校正日期。

new Date()
Sun Apr 16 2017 13:25:50 GMT+0800 (中国标准时间)  // 当前日期  4/16 

new Date(2017, 4, 1)
Mon May 01 2017 00:00:00 GMT+0800 (中国标准时间)  // 日期 5/1 日

我们可以看到这里有一个陷阱,当我们给月份的参数是 4 的时候,其实它是五月份。

接下来我们来看一看日期的自动修正。

new Date(2017, 3, 0)
Fri Mar 31 2017 00:00:00 GMT+0800 (中国标准时间) // 3 月 31 日     

// 4 月份的第 0 日,就是 3 月份的最后一日 

new Date(2017, 3, 1)
Sat Apr 01 2017 00:00:00 GMT+0800 (中国标准时间) // 4 月 1 日


new Date(2017, 4, 0)
Sun Apr 30 2017 00:00:00 GMT+0800 (中国标准时间) // 4 月 30 日

// 5 月份的 0 日,就是 4 月份的最后一日

new Date(2017, 3, 31)
Mon May 01 2017 00:00:00 GMT+0800 (中国标准时间) // 5 月 1 日

4 月份只有 30 日, 当为 31 日的时候,变成了 5月份的 1 日

通过这些我们就可以获取当前月份的最后一天,以及上个月最后一天。

  1. 首先我们准备一个基本的静态页面

到目前为止,我们已经可以看到一个雏形了,但是这是有形无神的,现在我们再来准备我们的神魂精华,也就是获取日期的逻辑。

解释都在注释里面,仔细看一下注释,然后自己运行一下,看看结果正确不正确。

接下来我们要把一些鼠标点击的事件,必须要等到已经渲染完HTML结构之后才能绑定,所以绑定的逻辑我们需要修改一下位置。

顺便我们把我们的渲染逻辑给写好,如下。

为了把当月的日期明显一点,我们增加一点样式

Last updated