Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
半栈学徒
incubator-echarts
提交
98bab4c5
I
incubator-echarts
项目概览
半栈学徒
/
incubator-echarts
与 Fork 源项目一致
从无法访问的项目Fork
通知
5
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
I
incubator-echarts
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
98bab4c5
编写于
9月 08, 2017
作者:
S
sushuang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix #6543. (Consider DST in calendar)
上级
6582eba1
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
65 addition
and
20 deletion
+65
-20
src/coord/calendar/Calendar.js
src/coord/calendar/Calendar.js
+64
-20
test/calendar.html
test/calendar.html
+1
-0
未找到文件。
src/coord/calendar/Calendar.js
浏览文件 @
98bab4c5
...
...
@@ -7,7 +7,7 @@ define(function (require) {
var
zrUtil
=
require
(
'
zrender/core/util
'
);
// (24*60*60*1000)
var
ONE_DAY
=
86400000
;
var
PROXIMATE_
ONE_DAY
=
86400000
;
/**
* Calendar
...
...
@@ -76,7 +76,16 @@ define(function (require) {
* get date info
*
* @param {string|number} date date
* @return {Object} info
* @return {Object}
* {
* y: string, local full year, eg., '1940',
* m: string, local month, from '01' ot '12',
* d: string, local date, from '01' to '31' (if exists),
* day: It is not date.getDay(). It is the location of the cell in a week, from 0 to 6,
* time: timestamp,
* formatedDate: string, yyyy-MM-dd,
* date: original date object.
* }
*/
getDateInfo
:
function
(
date
)
{
...
...
@@ -111,9 +120,10 @@ define(function (require) {
return
this
.
getDateInfo
(
date
);
}
var
time
=
this
.
getDateInfo
(
date
).
time
;
date
=
new
Date
(
this
.
getDateInfo
(
date
).
time
);
date
.
setDate
(
date
.
getDate
()
+
n
);
return
this
.
getDateInfo
(
time
+
ONE_DAY
*
n
);
return
this
.
getDateInfo
(
date
);
},
update
:
function
(
ecModel
,
api
)
{
...
...
@@ -179,18 +189,18 @@ define(function (require) {
}
var
week
=
dayInfo
.
day
;
var
nthWeek
=
this
.
_getRangeInfo
([
range
.
start
.
time
,
date
]).
weeks
;
var
nthWeek
=
this
.
_getRangeInfo
([
range
.
start
.
time
,
date
]).
nthWeek
;
if
(
this
.
_orient
===
'
vertical
'
)
{
return
[
this
.
_rect
.
x
+
week
*
this
.
_sw
+
this
.
_sw
/
2
,
this
.
_rect
.
y
+
(
nthWeek
-
1
)
*
this
.
_sh
+
this
.
_sh
/
2
this
.
_rect
.
y
+
nthWeek
*
this
.
_sh
+
this
.
_sh
/
2
];
}
return
[
this
.
_rect
.
x
+
(
nthWeek
-
1
)
*
this
.
_sw
+
this
.
_sw
/
2
,
this
.
_rect
.
x
+
nthWeek
*
this
.
_sw
+
this
.
_sw
/
2
,
this
.
_rect
.
y
+
week
*
this
.
_sh
+
this
.
_sh
/
2
];
...
...
@@ -328,25 +338,60 @@ define(function (require) {
*
* @private
* @param {Array} range range ['2017-01-01', '2017-07-08']
* If range[0] > range[1], they will not be reversed.
* @return {Object} obj
*/
_getRangeInfo
:
function
(
range
)
{
range
=
[
this
.
getDateInfo
(
range
[
0
]),
this
.
getDateInfo
(
range
[
1
])
];
var
start
=
this
.
getDateInfo
(
range
[
0
]);
var
end
=
this
.
getDateInfo
(
range
[
1
]);
var
reversed
;
if
(
range
[
0
].
time
>
range
[
1
].
time
)
{
reversed
=
true
;
range
.
reverse
();
}
var
allDay
=
Math
.
floor
(
end
.
time
/
ONE_DAY
)
-
Math
.
floor
(
start
.
time
/
ONE_DAY
)
+
1
;
var
allDay
=
Math
.
floor
(
range
[
1
].
time
/
PROXIMATE_ONE_DAY
)
-
Math
.
floor
(
range
[
0
].
time
/
PROXIMATE_ONE_DAY
)
+
1
;
// Consider case:
// Firstly set system timezone as "Time Zone: America/Toronto",
// ```
// var first = new Date(1478412000000 - 3600 * 1000 * 2.5);
// var second = new Date(1478412000000);
// var allDays = Math.floor(second / ONE_DAY) - Math.floor(first / ONE_DAY) + 1;
// ```
// will get wrong result because of DST. So we should fix it.
var
date
=
new
Date
(
range
[
0
].
time
);
var
startDateNum
=
date
.
getDate
();
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
sign
=
date
.
getTime
()
-
range
[
1
].
time
>
0
?
1
:
-
1
;
while
(
date
.
getDate
()
!==
endDateNum
&&
(
date
.
getTime
()
-
range
[
1
].
time
)
*
sign
>
0
)
{
allDay
-=
sign
;
date
.
setDate
(
startDateNum
+
allDay
-
1
);
}
}
var
weeks
=
Math
.
floor
((
allDay
+
range
[
0
].
day
+
6
)
/
7
);
var
nthWeek
=
reversed
?
-
weeks
+
1
:
weeks
-
1
;
var
weeks
=
Math
.
floor
((
allDay
+
start
.
day
+
6
)
/
7
);
reversed
&&
range
.
reverse
(
);
return
{
range
:
[
start
.
formatedDate
,
end
.
formatedDate
],
start
:
start
,
end
:
end
,
range
:
[
range
[
0
].
formatedDate
,
range
[
1
]
.
formatedDate
],
start
:
range
[
0
]
,
end
:
range
[
1
]
,
allDay
:
allDay
,
weeks
:
weeks
,
fweek
:
start
.
day
,
lweek
:
end
.
day
// From 0.
nthWeek
:
nthWeek
,
fweek
:
range
[
0
].
day
,
lweek
:
range
[
1
].
day
};
},
...
...
@@ -370,11 +415,10 @@ define(function (require) {
}
var
nthDay
=
(
nthWeek
-
1
)
*
7
-
rangeInfo
.
fweek
+
day
;
var
date
=
new
Date
(
rangeInfo
.
start
.
time
);
date
.
setDate
(
rangeInfo
.
start
.
d
+
nthDay
);
var
time
=
rangeInfo
.
start
.
time
+
nthDay
*
ONE_DAY
;
return
this
.
getDateInfo
(
time
);
return
this
.
getDateInfo
(
date
);
}
};
...
...
test/calendar.html
浏览文件 @
98bab4c5
...
...
@@ -15,6 +15,7 @@
height
:
100%
;
}
</style>
<h2>
Test: set system timezone as "Time Zone: America/Toronto", everything should be correct.
</h2>
<div
id=
"main"
></div>
<script>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录