You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by su...@apache.org on 2020/04/21 06:34:39 UTC
[incubator-echarts] branch master updated: fix: calendar timezone
bug in DST. Fix #12172. And add test cases.
This is an automated email from the ASF dual-hosted git repository.
sushuang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git
The following commit(s) were added to refs/heads/master by this push:
new 878829b fix: calendar timezone bug in DST. Fix #12172. And add test cases.
878829b is described below
commit 878829b46c4273b8a6793685b83bcecdb5313f8e
Author: 100pah <su...@gmail.com>
AuthorDate: Mon Apr 20 16:59:30 2020 -0400
fix: calendar timezone bug in DST. Fix #12172. And add test cases.
---
src/coord/calendar/Calendar.js | 19 +++--
test/calendar-timezone.html | 173 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 186 insertions(+), 6 deletions(-)
diff --git a/src/coord/calendar/Calendar.js b/src/coord/calendar/Calendar.js
index e397c0b..cf77e70 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 0000000..ede1b35
--- /dev/null
+++ b/test/calendar-timezone.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <script src="lib/esl.js"></script>
+ <script src="lib/config.js"></script>
+ <script src="lib/jquery.min.js"></script>
+ <script src="lib/facePrint.js"></script>
+ <script src="lib/testHelper.js"></script>
+ <!-- <script src="ut/lib/canteen.js"></script> -->
+ <link rel="stylesheet" href="lib/reset.css" />
+ </head>
+ <body>
+ <style>
+ </style>
+
+
+
+ <div id="main0"></div>
+ <div id="main1"></div>
+ <div id="main2"></div>
+
+
+
+
+
+
+
+
+
+ <script>
+ var getVirtulData = function(year) {
+
+ year = year || '2017';
+
+ var datas = [];
+
+ var arr31 = [1, 3, 5, 7, 8, 10, 12];
+ var arr30 = [4, 6, 9, 11];
+ for (var i = 1; i <= 31; i++) {
+ for (var j = arr31.length - 1; j >= 0; j--) {
+ datas.push([year + '-' + arr31[j] + '-' + i, Math.floor(Math.random() * 1000)]);
+ }
+ }
+ for (var i = 1; i <= 30; i++) {
+ for (var j = arr30.length - 1; j >= 0; j--) {
+ datas.push([year + '-' + arr30[j] + '-' + i, Math.floor(Math.random() * 1000)]);
+ }
+ }
+ for (var i = 1; i <= 29; i++) {
+ datas.push([year + '-2-' + i, Math.floor(Math.random() * 1000)]);
+ }
+ return datas;
+ }
+ </script>
+
+
+
+ <script>
+ require(['echarts'/*, 'map/js/china' */], function (echarts) {
+ var option;
+
+ // From #11677
+ option = {
+ tooltip: {
+ position: 'top'
+ },
+ visualMap: {
+ type: 'piecewise',
+ min: 0,
+ max: 1000,
+ seriesIndex: 0,
+ calculable: true,
+ orient: 'horizontal',
+ left: 'center',
+ top: 500
+ },
+ calendar: [{
+ range: ['2016-07-01', '2016-12-31']
+ }],
+ series: [{
+ type: 'heatmap',
+ calendarIndex: 0,
+ coordinateSystem: 'calendar',
+ data: getVirtulData(2017)
+ }]
+ };
+
+ var chart = testHelper.create(echarts, 'main0', {
+ title: [
+ 'Set the system timezone to **UK**',
+ 'the calendar coord sys should be correct'
+ ],
+ option: option
+ });
+ });
+ </script>
+
+
+
+
+ <script>
+ require(['echarts'/*, 'map/js/china' */], function (echarts) {
+ var option;
+
+ // From #10430
+ option = {
+ tooltip: {
+ position: 'top'
+ },
+ visualMap: {
+ type: 'piecewise',
+ min: 0,
+ max: 1000,
+ seriesIndex: 0,
+ calculable: true,
+ orient: 'horizontal',
+ left: 'center',
+ top: 500
+ },
+ calendar: [{
+ cellSize: ['auto', 13],
+ range: '2016-10',
+ itemStyle: {
+ normal: {borderWidth: 0.5}
+ },
+ yearLabel: {show: false}
+ }],
+ series: [{
+ type: 'heatmap',
+ calendarIndex: 0,
+ coordinateSystem: 'calendar',
+ data: getVirtulData(2017)
+ }]
+ };
+
+ var chart = testHelper.create(echarts, 'main1', {
+ title: [
+ 'Set the system timezone to **UK**',
+ 'the calendar coord sys should be correct (like a inverted Z)'
+ ],
+ option: option
+ });
+ });
+ </script>
+
+
+
+
+ </body>
+</html>
+
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org