yscoder / Calendar

A calendar picker component, based on jQuery.
49 stars 33 forks source link

发现一个BUG #6

Closed ZaneYork closed 8 years ago

ZaneYork commented 8 years ago

在当前月份比上一月或下一月天数多的时候,添加的数据会无法被展示。 修复方案如下:

String.prototype.toDate = function() {
    var dt = new Date(1971,1,1),
        dot = this.replace(/\d/g, '').charAt(0),
        arr = this.split(dot);

    dt.setFullYear(parseInt(arr[0]));
    dt.setMonth(parseInt(arr[1]) - 1);
    dt.setDate(parseInt(arr[2]));
    return dt;
}
yscoder commented 8 years ago

不能理解 new Date(1971,1,1) 这样做的意义。new Date() 是相对于当前时间初始化的,两者最后的差别是 new Date(1971,1,1) 生成的时间时分秒都为 0,而 new Date() 会附带初始化时的时分秒。

严格上说,是应该清空时分秒,或许你的问题是多出来的时分秒造成的?

ZaneYork commented 8 years ago

你把当前日期调到10月31日,切换到上一日,就会触发BUG。原因是,取得的当前日期是31日,然后被设置为9月,9月没有31日,于是自动被转换为10月1日,接着被下一条语句设置为10月XX日。而本来的要求是设置为9月XX日。指定一个固定的日期就是为了避免被自动调整,当然,直接生成对应的日期对象亦可。以上

yscoder commented 8 years ago

image

是这样的问题吗

ZaneYork commented 8 years ago

a b

如图,本来所有日期都是有数据的。但是如果当前是10月31日,那么就会导致9月的数据无法显示。

yscoder commented 8 years ago

我 get 到了,时间清零可以解决。

image