说一说bootstrap-datepicker项目不大不小的坑

最近接手了一个Bootstrap的项目,因为要用到一个日期组件,所以放狗一搜,就有了bootstrap-datepicker这个控件。使用起来倒是也不难,但是差点被坑了一下。

什么情况呢?该项目需要日期控件控制用户的日期选择段,且要控制这一段时间内春节那几天不能被选择。该控件提供了:

  • startDate,endDate来控制日期段的起始日
  • datesDisabled来控制某几日不能被选择

OK。写代码,测试都通过,没有问题,上线。但是上线第一日早晨8点之前在做最后一次测试时,测试人员发现春节不能选择的那几天,莫名其妙的被推后了一天。即本来是7号-13号不能选择,但是却变成了6号-13号不能被选择。于是做了一番研究,发现问题在于这几个类在解析时,控件内部使用了不同的时区解析策略:

  • 对于startDate,endDate,它使用local timezone去比较哪几天不能被选择,这很正常
  • 对于datesDisabled,控件却使用了UTC timezone去比较哪几天不能被选择。这就导致,比如说中国,在东八区,那么早上8点之前,我们已经是4号了,但是UTC时间还是3号。这就造成了一天的差异。

目前的解决方案是各使用不同的初始化值:

  • 对于startDate,endDate,就使用new Date(2016, 0, 22, 0, 0, 0);
  • 对于datesDisabled,则使用new Date(Date.UTC(2016, 1, 7, 0, 0, 0));

已经将问题提交了Issue,看了一眼,已经大概有356个open的issue了,估计我提的也不会得到受理。

Show Comments