diff --git a/src/coord/calendar/Calendar.js b/src/coord/calendar/Calendar.js index e397c0ba6c33c8d51c79f558b222b27fffa9a243..cf77e70f10a8f920bac1f80303b69375feb504d4 100644 --- a/src/coord/calendar/Calendar.js +++ b/src/coord/calendar/Calendar.js @@ -372,10 +372,13 @@ Calendar.prototype = { range.reverse(); } - var allDay = - Math.round((range[1].time - range[0].time) / PROXIMATE_ONE_DAY) + 1; + var allDay = Math.floor(range[1].time / PROXIMATE_ONE_DAY) + - Math.floor(range[0].time / PROXIMATE_ONE_DAY) + 1; - // Consider case: + // Consider case1 (#11677 #10430): + // Set the system timezone as "UK", set the range to `['2016-07-01', '2016-12-31']` + + // Consider case2: // Firstly set system timezone as "Time Zone: America/Toronto", // ``` // var first = new Date(1478412000000 - 3600 * 1000 * 2.5); @@ -388,11 +391,15 @@ Calendar.prototype = { var endDateNum = range[1].date.getDate(); date.setDate(startDateNum + allDay - 1); // The bias can not over a month, so just compare date. - if (date.getDate() !== endDateNum) { + var dateNum = date.getDate(); + if (dateNum !== endDateNum) { var sign = date.getTime() - range[1].time > 0 ? 1 : -1; - while (date.getDate() !== endDateNum && (date.getTime() - range[1].time) * sign > 0) { + while ( + (dateNum = date.getDate()) !== endDateNum + && (date.getTime() - range[1].time) * sign > 0 + ) { allDay -= sign; - date.setDate(startDateNum + allDay - 1); + date.setDate(dateNum - sign); } } diff --git a/test/calendar-timezone.html b/test/calendar-timezone.html new file mode 100644 index 0000000000000000000000000000000000000000..ede1b35b659b6bf12705e961ad2154f559ed7755 --- /dev/null +++ b/test/calendar-timezone.html @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +