Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
e8b9d0c2
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e8b9d0c2
编写于
11月 11, 2016
作者:
G
giulianovarriale
提交者:
Mike Greiling
1月 02, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Pass date as integer params on instantiate new Date in order to avoid time zone inconsistency
上级
313aa339
变更
6
显示空白变更内容
内联
并排
Showing
6 changed file
with
111 addition
and
3 deletion
+111
-3
app/assets/javascripts/due_date_select.js.es6
app/assets/javascripts/due_date_select.js.es6
+8
-3
app/assets/javascripts/lib/utils/datetime_utility.js
app/assets/javascripts/lib/utils/datetime_utility.js
+13
-0
changelogs/unreleased/fix-timezone-due-date-picker.yml
changelogs/unreleased/fix-timezone-due-date-picker.yml
+4
-0
spec/javascripts/datetime_utility_spec.js.es6
spec/javascripts/datetime_utility_spec.js.es6
+32
-0
spec/javascripts/due_date_select_spec.js.es6
spec/javascripts/due_date_select_spec.js.es6
+25
-0
spec/javascripts/fixtures/due_date_select.html.haml
spec/javascripts/fixtures/due_date_select.html.haml
+29
-0
未找到文件。
app/assets/javascripts/due_date_select.js.es6
浏览文件 @
e8b9d0c2
...
...
@@ -2,9 +2,10 @@
(function(global) {
class DueDateSelect {
constructor({ $dropdown, $loading } = {}) {
constructor({ $dropdown, $loading
, $context
} = {}) {
const $dropdownParent = $dropdown.closest('.dropdown');
const $block = $dropdown.closest('.block');
this.$context = $context || $('body');
this.$loading = $loading;
this.$dropdown = $dropdown;
this.$dropdownParent = $dropdownParent;
...
...
@@ -80,9 +81,12 @@
}
parseSelectedDate() {
this.rawSelectedDate = $("input[name='" + this.fieldName + "']").val();
this.rawSelectedDate = this.$context.find(`input[name='${this.fieldName}']`).val();
if (this.rawSelectedDate.length) {
let dateObj = new Date(this.rawSelectedDate);
// Avoid time zone inconsistency using the utils.createDateObject
// method, instead of the native Date object.
const dateObj = gl.utils.createDateObject(this.rawSelectedDate);
this.displayedDate = $.datepicker.formatDate('M d, yy', dateObj);
} else {
this.displayedDate = 'No due date';
...
...
@@ -176,5 +180,6 @@
}
global.DueDateSelectors = DueDateSelectors;
global.DueDateSelect = DueDateSelect;
})(window.gl || (window.gl = {}));
app/assets/javascripts/lib/utils/datetime_utility.js
浏览文件 @
e8b9d0c2
...
...
@@ -16,6 +16,19 @@
}
w
.
gl
.
utils
.
days
=
[
'
Sunday
'
,
'
Monday
'
,
'
Tuesday
'
,
'
Wednesday
'
,
'
Thursday
'
,
'
Friday
'
,
'
Saturday
'
];
// createDateObject must be used instead of using native Date object
// to create a new Date instance using string as param - '2016-11-10' or
// '2016/11/10' in order to avoid time zone inconsistency.
w
.
gl
.
utils
.
createDateObject
=
function
(
string
)
{
var
dateSeparator
=
string
.
indexOf
(
'
-
'
)
>
-
1
?
'
-
'
:
'
/
'
;
var
dateArray
=
string
.
split
(
dateSeparator
).
map
(
function
(
dateItem
)
{
return
parseInt
(
dateItem
,
10
);
});
return
new
Date
(
dateArray
[
0
],
dateArray
[
1
]
-
1
,
dateArray
[
2
]);
}
w
.
gl
.
utils
.
formatDate
=
function
(
datetime
)
{
return
dateFormat
(
datetime
,
'
mmm d, yyyy h:MMtt Z
'
);
};
...
...
changelogs/unreleased/fix-timezone-due-date-picker.yml
0 → 100644
浏览文件 @
e8b9d0c2
---
title
:
Fix date inconsistency on due date picker
merge_request
:
author
:
Giuliano Varriale
spec/javascripts/datetime_utility_spec.js.es6
浏览文件 @
e8b9d0c2
...
...
@@ -2,6 +2,38 @@
(() => {
describe('Date time utils', () => {
describe('create date object', () => {
describe('using dashes', () => {
it('should instantiate the date object using integer params', () => {
spyOn(window, 'Date')
gl.utils.createDateObject('2016-11-12');
expect(window.Date).toHaveBeenCalledWith(2016, 10, 12);
});
it('should return the right date object ', () => {
const date = gl.utils.createDateObject('2016-11-12');
expect(date.getDate()).toBe(12);
expect(date.getMonth()).toBe(10);
expect(date.getFullYear()).toBe(2016);
});
});
describe('using slashes', () => {
it('should instantiate the date object using integer params', () => {
spyOn(window, 'Date')
gl.utils.createDateObject('2016/08/02');
expect(window.Date).toHaveBeenCalledWith(2016, 7, 2);
});
it('should return the right date object', () => {
const date = gl.utils.createDateObject('2016/08/02');
expect(date.getDate()).toBe(2);
expect(date.getMonth()).toBe(7);
expect(date.getFullYear()).toBe(2016);
});
});
});
describe('get day name', () => {
it('should return Sunday', () => {
const day = gl.utils.getDayName(new Date('07/17/2016'));
...
...
spec/javascripts/due_date_select_spec.js.es6
0 → 100644
浏览文件 @
e8b9d0c2
/* eslint-disable */
//= require lib/utils/datetime_utility
//= require jquery
/*= require jquery-ui/datepicker */
/*= require gl_dropdown */
//= require due_date_select
(() => {
describe('Due Date Select', () => {
describe('parseSelectedDate()', () => {
it('call create date object', () => {
const $dom = $(fixture.preload('due_date_select.html')[0]);
const dueDateSelect = new gl.DueDateSelect({
$context: $dom,
$dropdown: $dom.find('.js-due-date-select'),
$loading: $dom.find('.block-loading')
});
spyOn(gl.utils, 'createDateObject');
dueDateSelect.parseSelectedDate();
expect(gl.utils.createDateObject).toHaveBeenCalledWith('2016-11-20');
});
});
});
})();
spec/javascripts/fixtures/due_date_select.html.haml
0 → 100644
浏览文件 @
e8b9d0c2
.block.due_date
.sidebar-collapsed-icon
%i
.fa.fa-calendar
%span
.js-due-date-sidebar-value
Nov 20, 2016
.title.hide-collapsed
Due date
%i
.fa.fa-spinner.fa-spin.block-loading
%a
.edit-link.pull-right
{
href:
"#"
}
Edit
.value.hide-collapsed
%span
.value-content
%span
.bold
Nov 20, 2016
%span
.no-value.js-remove-due-date-holder
%a
.js-remove-due-date
{
href:
"#"
,
role:
"button"
}
remove due date
.selectbox.hide-collapsed
%input
{
type:
"hidden"
,
name:
"issue[due_date]"
,
id:
"issue[due_date]"
,
value:
"2016-11-20"
}
.dropdown
%button
.dropdown-menu-toggle.js-due-date-select
{
type:
'button'
,
data:
{
toggle:
'dropdown'
,
field_name:
"issue[due_date]"
,
ability_name:
"issue"
,
issue_update:
"/h5bp/html5-boilerplate/issues/10.json"
}
}
%span
.dropdown-toggle-text
Due date
%i
.fa.fa-chevron-down
.dropdown-menu.dropdown-menu-due-date
.dropdown-title
%span
Due Date
%button
.dropdown-title-button.dropdown-menu-close
{
type:
"button"
}
%i
.fa.fa-times.dropdown-menu-close-icon
.dropdown-content
.js-due-date-calendar
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录