Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
fgqyxxlr
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
yaru
fgqyxxlr
Commits
9fc42511
Commit
9fc42511
authored
Mar 13, 2019
by
RuoYi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
datetimepicker 汉化
parent
c9bd08c2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
14 additions
and
3 deletions
+14
-3
ruoyi-admin/src/main/resources/static/ajax/libs/datapicker/bootstrap-datetimepicker.js
+12
-1
ruoyi-admin/src/main/resources/static/ajax/libs/datapicker/bootstrap-datetimepicker.min.js
+2
-2
No files found.
ruoyi-admin/src/main/resources/static/ajax/libs/datapicker/bootstrap-datetimepicker.js
View file @
9fc42511
...
...
@@ -82,7 +82,7 @@
// when page switch the datetimepicker div will be removed also.
this
.
container
=
options
.
container
||
'body'
;
this
.
language
=
options
.
language
||
this
.
element
.
data
(
'date-language'
)
||
'
e
n'
;
this
.
language
=
options
.
language
||
this
.
element
.
data
(
'date-language'
)
||
'
zh-c
n'
;
this
.
language
=
this
.
language
in
dates
?
this
.
language
:
this
.
language
.
split
(
'-'
)[
0
];
// fr-CA fallback to fr
this
.
language
=
this
.
language
in
dates
?
this
.
language
:
'en'
;
this
.
isRTL
=
dates
[
this
.
language
].
rtl
||
false
;
...
...
@@ -1494,6 +1494,17 @@
};
$
.
fn
.
datetimepicker
.
Constructor
=
Datetimepicker
;
var
dates
=
$
.
fn
.
datetimepicker
.
dates
=
{
'zh-cn'
:
{
days
:
[
"星期日"
,
"星期一"
,
"星期二"
,
"星期三"
,
"星期四"
,
"星期五"
,
"星期六"
,
"星期日"
],
daysShort
:
[
"周日"
,
"周一"
,
"周二"
,
"周三"
,
"周四"
,
"周五"
,
"周六"
,
"周日"
],
daysMin
:
[
"日"
,
"一"
,
"二"
,
"三"
,
"四"
,
"五"
,
"六"
,
"日"
],
months
:
[
"一月"
,
"二月"
,
"三月"
,
"四月"
,
"五月"
,
"六月"
,
"七月"
,
"八月"
,
"九月"
,
"十月"
,
"十一月"
,
"十二月"
],
monthsShort
:
[
"一月"
,
"二月"
,
"三月"
,
"四月"
,
"五月"
,
"六月"
,
"七月"
,
"八月"
,
"九月"
,
"十月"
,
"十一月"
,
"十二月"
],
meridiem
:
[
"上午"
,
"下午"
],
suffix
:
[
"st"
,
"nd"
,
"rd"
,
"th"
],
today
:
"今天"
,
clear
:
"清除"
},
en
:
{
days
:
[
'Sunday'
,
'Monday'
,
'Tuesday'
,
'Wednesday'
,
'Thursday'
,
'Friday'
,
'Saturday'
,
'Sunday'
],
daysShort
:
[
'Sun'
,
'Mon'
,
'Tue'
,
'Wed'
,
'Thu'
,
'Fri'
,
'Sat'
,
'Sun'
],
...
...
ruoyi-admin/src/main/resources/static/ajax/libs/datapicker/bootstrap-datetimepicker.min.js
View file @
9fc42511
(
function
(
a
){
if
(
typeof
define
===
"function"
&&
define
.
amd
){
define
([
"jquery"
],
a
)}
else
{
if
(
typeof
exports
===
"object"
){
a
(
require
(
"jquery"
))}
else
{
a
(
jQuery
)}}}(
function
(
d
,
f
){
if
(
!
(
"indexOf"
in
Array
.
prototype
)){
Array
.
prototype
.
indexOf
=
function
(
k
,
j
){
if
(
j
===
f
){
j
=
0
}
if
(
j
<
0
){
j
+=
this
.
length
}
if
(
j
<
0
){
j
=
0
}
for
(
var
l
=
this
.
length
;
j
<
l
;
j
++
){
if
(
j
in
this
&&
this
[
j
]
===
k
){
return
j
}}
return
-
1
}}
function
a
(){
var
q
,
k
,
p
,
l
,
j
,
n
,
m
,
o
;
k
=
(
new
Date
()).
toString
();
p
=
((
m
=
k
.
split
(
"("
)[
1
])
!=
null
?
m
.
slice
(
0
,
-
1
):
0
)
||
k
.
split
(
" "
);
if
(
p
instanceof
Array
){
n
=
[];
for
(
var
l
=
0
,
j
=
p
.
length
;
l
<
j
;
l
++
){
o
=
p
[
l
];
if
((
q
=
(
m
=
o
.
match
(
/
\b[
A-Z
]
+
\b
/
))
!==
null
)?
m
[
0
]:
0
){
n
.
push
(
q
)}}
p
=
n
.
pop
()}
return
p
}
function
h
(){
return
new
Date
(
Date
.
UTC
.
apply
(
Date
,
arguments
))}
var
g
=
function
(
k
,
j
){
var
m
=
this
;
this
.
element
=
d
(
k
);
this
.
container
=
j
.
container
||
"body"
;
this
.
language
=
j
.
language
||
this
.
element
.
data
(
"date-language"
)
||
"en"
;
this
.
language
=
this
.
language
in
e
?
this
.
language
:
this
.
language
.
split
(
"-"
)[
0
];
this
.
language
=
this
.
language
in
e
?
this
.
language
:
"en"
;
this
.
isRTL
=
e
[
this
.
language
].
rtl
||
false
;
this
.
formatType
=
j
.
formatType
||
this
.
element
.
data
(
"format-type"
)
||
"standard"
;
this
.
format
=
c
.
parseFormat
(
j
.
format
||
this
.
element
.
data
(
"date-format"
)
||
e
[
this
.
language
].
format
||
c
.
getDefaultFormat
(
this
.
formatType
,
"input"
),
this
.
formatType
);
this
.
isInline
=
false
;
this
.
isVisible
=
false
;
this
.
isInput
=
this
.
element
.
is
(
"input"
);
this
.
fontAwesome
=
j
.
fontAwesome
||
this
.
element
.
data
(
"font-awesome"
)
||
false
;
this
.
bootcssVer
=
j
.
bootcssVer
||
(
this
.
isInput
?(
this
.
element
.
is
(
".form-control"
)?
3
:
2
):(
this
.
bootcssVer
=
this
.
element
.
is
(
".input-group"
)?
3
:
2
));
this
.
component
=
this
.
element
.
is
(
".date"
)?(
this
.
bootcssVer
===
3
?
this
.
element
.
find
(
".input-group-addon .glyphicon-th, .input-group-addon .glyphicon-time, .input-group-addon .glyphicon-remove, .input-group-addon .glyphicon-calendar, .input-group-addon .fa-calendar, .input-group-addon .fa-clock-o"
).
parent
():
this
.
element
.
find
(
".add-on .icon-th, .add-on .icon-time, .add-on .icon-calendar, .add-on .fa-calendar, .add-on .fa-clock-o"
).
parent
()):
false
;
this
.
componentReset
=
this
.
element
.
is
(
".date"
)?(
this
.
bootcssVer
===
3
?
this
.
element
.
find
(
".input-group-addon .glyphicon-remove, .input-group-addon .fa-times"
).
parent
():
this
.
element
.
find
(
".add-on .icon-remove, .add-on .fa-times"
).
parent
()):
false
;
this
.
hasInput
=
this
.
component
&&
this
.
element
.
find
(
"input"
).
length
;
if
(
this
.
component
&&
this
.
component
.
length
===
0
){
this
.
component
=
false
}
this
.
linkField
=
j
.
linkField
||
this
.
element
.
data
(
"link-field"
)
||
false
;
this
.
linkFormat
=
c
.
parseFormat
(
j
.
linkFormat
||
this
.
element
.
data
(
"link-format"
)
||
c
.
getDefaultFormat
(
this
.
formatType
,
"link"
),
this
.
formatType
);
this
.
minuteStep
=
j
.
minuteStep
||
this
.
element
.
data
(
"minute-step"
)
||
5
;
this
.
pickerPosition
=
j
.
pickerPosition
||
this
.
element
.
data
(
"picker-position"
)
||
"bottom-right"
;
this
.
showMeridian
=
j
.
showMeridian
||
this
.
element
.
data
(
"show-meridian"
)
||
false
;
this
.
initialDate
=
j
.
initialDate
||
new
Date
();
this
.
zIndex
=
j
.
zIndex
||
this
.
element
.
data
(
"z-index"
)
||
f
;
this
.
title
=
typeof
j
.
title
===
"undefined"
?
false
:
j
.
title
;
this
.
timezone
=
j
.
timezone
||
a
();
this
.
icons
=
{
leftArrow
:
this
.
fontAwesome
?
"fa-arrow-left"
:(
this
.
bootcssVer
===
3
?
"glyphicon-arrow-left"
:
"icon-arrow-left"
),
rightArrow
:
this
.
fontAwesome
?
"fa-arrow-right"
:(
this
.
bootcssVer
===
3
?
"glyphicon-arrow-right"
:
"icon-arrow-right"
)};
this
.
icontype
=
this
.
fontAwesome
?
"fa"
:
"glyphicon"
;
this
.
_attachEvents
();
this
.
clickedOutside
=
function
(
n
){
if
(
d
(
n
.
target
).
closest
(
".datetimepicker"
).
length
===
0
){
m
.
hide
()}};
this
.
formatViewType
=
"datetime"
;
if
(
"formatViewType"
in
j
){
this
.
formatViewType
=
j
.
formatViewType
}
else
{
if
(
"formatViewType"
in
this
.
element
.
data
()){
this
.
formatViewType
=
this
.
element
.
data
(
"formatViewType"
)}}
this
.
minView
=
0
;
if
(
"minView"
in
j
){
this
.
minView
=
j
.
minView
}
else
{
if
(
"minView"
in
this
.
element
.
data
()){
this
.
minView
=
this
.
element
.
data
(
"min-view"
)}}
this
.
minView
=
c
.
convertViewMode
(
this
.
minView
);
this
.
maxView
=
c
.
modes
.
length
-
1
;
if
(
"maxView"
in
j
){
this
.
maxView
=
j
.
maxView
}
else
{
if
(
"maxView"
in
this
.
element
.
data
()){
this
.
maxView
=
this
.
element
.
data
(
"max-view"
)}}
this
.
maxView
=
c
.
convertViewMode
(
this
.
maxView
);
this
.
wheelViewModeNavigation
=
false
;
if
(
"wheelViewModeNavigation"
in
j
){
this
.
wheelViewModeNavigation
=
j
.
wheelViewModeNavigation
}
else
{
if
(
"wheelViewModeNavigation"
in
this
.
element
.
data
()){
this
.
wheelViewModeNavigation
=
this
.
element
.
data
(
"view-mode-wheel-navigation"
)}}
this
.
wheelViewModeNavigationInverseDirection
=
false
;
if
(
"wheelViewModeNavigationInverseDirection"
in
j
){
this
.
wheelViewModeNavigationInverseDirection
=
j
.
wheelViewModeNavigationInverseDirection
}
else
{
if
(
"wheelViewModeNavigationInverseDirection"
in
this
.
element
.
data
()){
this
.
wheelViewModeNavigationInverseDirection
=
this
.
element
.
data
(
"view-mode-wheel-navigation-inverse-dir"
)}}
this
.
wheelViewModeNavigationDelay
=
100
;
if
(
"wheelViewModeNavigationDelay"
in
j
){
this
.
wheelViewModeNavigationDelay
=
j
.
wheelViewModeNavigationDelay
}
else
{
if
(
"wheelViewModeNavigationDelay"
in
this
.
element
.
data
()){
this
.
wheelViewModeNavigationDelay
=
this
.
element
.
data
(
"view-mode-wheel-navigation-delay"
)}}
this
.
startViewMode
=
2
;
if
(
"startView"
in
j
){
this
.
startViewMode
=
j
.
startView
}
else
{
if
(
"startView"
in
this
.
element
.
data
()){
this
.
startViewMode
=
this
.
element
.
data
(
"start-view"
)}}
this
.
startViewMode
=
c
.
convertViewMode
(
this
.
startViewMode
);
this
.
viewMode
=
this
.
startViewMode
;
this
.
viewSelect
=
this
.
minView
;
if
(
"viewSelect"
in
j
){
this
.
viewSelect
=
j
.
viewSelect
}
else
{
if
(
"viewSelect"
in
this
.
element
.
data
()){
this
.
viewSelect
=
this
.
element
.
data
(
"view-select"
)}}
this
.
viewSelect
=
c
.
convertViewMode
(
this
.
viewSelect
);
this
.
forceParse
=
true
;
if
(
"forceParse"
in
j
){
this
.
forceParse
=
j
.
forceParse
}
else
{
if
(
"dateForceParse"
in
this
.
element
.
data
()){
this
.
forceParse
=
this
.
element
.
data
(
"date-force-parse"
)}}
var
l
=
this
.
bootcssVer
===
3
?
c
.
templateV3
:
c
.
template
;
while
(
l
.
indexOf
(
"{iconType}"
)
!==-
1
){
l
=
l
.
replace
(
"{iconType}"
,
this
.
icontype
)}
while
(
l
.
indexOf
(
"{leftArrow}"
)
!==-
1
){
l
=
l
.
replace
(
"{leftArrow}"
,
this
.
icons
.
leftArrow
)}
while
(
l
.
indexOf
(
"{rightArrow}"
)
!==-
1
){
l
=
l
.
replace
(
"{rightArrow}"
,
this
.
icons
.
rightArrow
)}
this
.
picker
=
d
(
l
).
appendTo
(
this
.
isInline
?
this
.
element
:
this
.
container
).
on
({
click
:
d
.
proxy
(
this
.
click
,
this
),
mousedown
:
d
.
proxy
(
this
.
mousedown
,
this
)});
if
(
this
.
wheelViewModeNavigation
){
if
(
d
.
fn
.
mousewheel
){
this
.
picker
.
on
({
mousewheel
:
d
.
proxy
(
this
.
mousewheel
,
this
)})}
else
{
console
.
log
(
"Mouse Wheel event is not supported. Please include the jQuery Mouse Wheel plugin before enabling this option"
)}}
if
(
this
.
isInline
){
this
.
picker
.
addClass
(
"datetimepicker-inline"
)}
else
{
this
.
picker
.
addClass
(
"datetimepicker-dropdown-"
+
this
.
pickerPosition
+
" dropdown-menu"
)}
if
(
this
.
isRTL
){
this
.
picker
.
addClass
(
"datetimepicker-rtl"
);
var
i
=
this
.
bootcssVer
===
3
?
".prev span, .next span"
:
".prev i, .next i"
;
this
.
picker
.
find
(
i
).
toggleClass
(
this
.
icons
.
leftArrow
+
" "
+
this
.
icons
.
rightArrow
)}
d
(
document
).
on
(
"mousedown touchend"
,
this
.
clickedOutside
);
this
.
autoclose
=
false
;
if
(
"autoclose"
in
j
){
this
.
autoclose
=
j
.
autoclose
}
else
{
if
(
"dateAutoclose"
in
this
.
element
.
data
()){
this
.
autoclose
=
this
.
element
.
data
(
"date-autoclose"
)}}
this
.
keyboardNavigation
=
true
;
if
(
"keyboardNavigation"
in
j
){
this
.
keyboardNavigation
=
j
.
keyboardNavigation
}
else
{
if
(
"dateKeyboardNavigation"
in
this
.
element
.
data
()){
this
.
keyboardNavigation
=
this
.
element
.
data
(
"date-keyboard-navigation"
)}}
this
.
todayBtn
=
(
j
.
todayBtn
||
this
.
element
.
data
(
"date-today-btn"
)
||
false
);
this
.
clearBtn
=
(
j
.
clearBtn
||
this
.
element
.
data
(
"date-clear-btn"
)
||
false
);
this
.
todayHighlight
=
(
j
.
todayHighlight
||
this
.
element
.
data
(
"date-today-highlight"
)
||
false
);
this
.
weekStart
=
0
;
if
(
typeof
j
.
weekStart
!==
"undefined"
){
this
.
weekStart
=
j
.
weekStart
}
else
{
if
(
typeof
this
.
element
.
data
(
"date-weekstart"
)
!==
"undefined"
){
this
.
weekStart
=
this
.
element
.
data
(
"date-weekstart"
)}
else
{
if
(
typeof
e
[
this
.
language
].
weekStart
!==
"undefined"
){
this
.
weekStart
=
e
[
this
.
language
].
weekStart
}}}
this
.
weekStart
=
this
.
weekStart
%
7
;
this
.
weekEnd
=
((
this
.
weekStart
+
6
)
%
7
);
this
.
onRenderDay
=
function
(
n
){
var
p
=
(
j
.
onRenderDay
||
function
(){
return
[]})(
n
);
if
(
typeof
p
===
"string"
){
p
=
[
p
]}
var
o
=
[
"day"
];
return
o
.
concat
((
p
?
p
:[]))};
this
.
onRenderHour
=
function
(
n
){
var
p
=
(
j
.
onRenderHour
||
function
(){
return
[]})(
n
);
var
o
=
[
"hour"
];
if
(
typeof
p
===
"string"
){
p
=
[
p
]}
return
o
.
concat
((
p
?
p
:[]))};
this
.
onRenderMinute
=
function
(
n
){
var
p
=
(
j
.
onRenderMinute
||
function
(){
return
[]})(
n
);
var
o
=
[
"minute"
];
if
(
typeof
p
===
"string"
){
p
=
[
p
]}
if
(
n
<
this
.
startDate
||
n
>
this
.
endDate
){
o
.
push
(
"disabled"
)}
else
{
if
(
Math
.
floor
(
this
.
date
.
getUTCMinutes
()
/
this
.
minuteStep
)
===
Math
.
floor
(
n
.
getUTCMinutes
()
/
this
.
minuteStep
)){
o
.
push
(
"active"
)}}
return
o
.
concat
((
p
?
p
:[]))};
this
.
onRenderYear
=
function
(
o
){
var
q
=
(
j
.
onRenderYear
||
function
(){
return
[]})(
o
);
var
p
=
[
"year"
];
if
(
typeof
q
===
"string"
){
q
=
[
q
]}
if
(
this
.
date
.
getUTCFullYear
()
===
o
.
getUTCFullYear
()){
p
.
push
(
"active"
)}
var
n
=
o
.
getUTCFullYear
();
var
r
=
this
.
endDate
.
getUTCFullYear
();
if
(
o
<
this
.
startDate
||
n
>
r
){
p
.
push
(
"disabled"
)}
return
p
.
concat
((
q
?
q
:[]))};
this
.
onRenderMonth
=
function
(
n
){
var
p
=
(
j
.
onRenderMonth
||
function
(){
return
[]})(
n
);
var
o
=
[
"month"
];
if
(
typeof
p
===
"string"
){
p
=
[
p
]}
return
o
.
concat
((
p
?
p
:[]))};
this
.
startDate
=
new
Date
(
-
8639968443048000
);
this
.
endDate
=
new
Date
(
8639968443048000
);
this
.
datesDisabled
=
[];
this
.
daysOfWeekDisabled
=
[];
this
.
setStartDate
(
j
.
startDate
||
this
.
element
.
data
(
"date-startdate"
));
this
.
setEndDate
(
j
.
endDate
||
this
.
element
.
data
(
"date-enddate"
));
this
.
setDatesDisabled
(
j
.
datesDisabled
||
this
.
element
.
data
(
"date-dates-disabled"
));
this
.
setDaysOfWeekDisabled
(
j
.
daysOfWeekDisabled
||
this
.
element
.
data
(
"date-days-of-week-disabled"
));
this
.
setMinutesDisabled
(
j
.
minutesDisabled
||
this
.
element
.
data
(
"date-minute-disabled"
));
this
.
setHoursDisabled
(
j
.
hoursDisabled
||
this
.
element
.
data
(
"date-hour-disabled"
));
this
.
fillDow
();
this
.
fillMonths
();
this
.
update
();
this
.
showMode
();
if
(
this
.
isInline
){
this
.
show
()}};
g
.
prototype
=
{
constructor
:
g
,
_events
:[],
_attachEvents
:
function
(){
this
.
_detachEvents
();
if
(
this
.
isInput
){
this
.
_events
=
[[
this
.
element
,{
focus
:
d
.
proxy
(
this
.
show
,
this
),
keyup
:
d
.
proxy
(
this
.
update
,
this
),
keydown
:
d
.
proxy
(
this
.
keydown
,
this
)}]]}
else
{
if
(
this
.
component
&&
this
.
hasInput
){
this
.
_events
=
[[
this
.
element
.
find
(
"input"
),{
focus
:
d
.
proxy
(
this
.
show
,
this
),
keyup
:
d
.
proxy
(
this
.
update
,
this
),
keydown
:
d
.
proxy
(
this
.
keydown
,
this
)}],[
this
.
component
,{
click
:
d
.
proxy
(
this
.
show
,
this
)}]];
if
(
this
.
componentReset
){
this
.
_events
.
push
([
this
.
componentReset
,{
click
:
d
.
proxy
(
this
.
reset
,
this
)}])}}
else
{
if
(
this
.
element
.
is
(
"div"
)){
this
.
isInline
=
true
}
else
{
this
.
_events
=
[[
this
.
element
,{
click
:
d
.
proxy
(
this
.
show
,
this
)}]]}}}
for
(
var
j
=
0
,
k
,
l
;
j
<
this
.
_events
.
length
;
j
++
){
k
=
this
.
_events
[
j
][
0
];
l
=
this
.
_events
[
j
][
1
];
k
.
on
(
l
)}},
_detachEvents
:
function
(){
for
(
var
j
=
0
,
k
,
l
;
j
<
this
.
_events
.
length
;
j
++
){
k
=
this
.
_events
[
j
][
0
];
l
=
this
.
_events
[
j
][
1
];
k
.
off
(
l
)}
this
.
_events
=
[]},
show
:
function
(
i
){
this
.
picker
.
show
();
this
.
height
=
this
.
component
?
this
.
component
.
outerHeight
():
this
.
element
.
outerHeight
();
if
(
this
.
forceParse
){
this
.
update
()}
this
.
place
();
d
(
window
).
on
(
"resize"
,
d
.
proxy
(
this
.
place
,
this
));
if
(
i
){
i
.
stopPropagation
();
i
.
preventDefault
()}
this
.
isVisible
=
true
;
this
.
element
.
trigger
({
type
:
"show"
,
date
:
this
.
date
})},
hide
:
function
(){
if
(
!
this
.
isVisible
){
return
}
if
(
this
.
isInline
){
return
}
this
.
picker
.
hide
();
d
(
window
).
off
(
"resize"
,
this
.
place
);
this
.
viewMode
=
this
.
startViewMode
;
this
.
showMode
();
if
(
!
this
.
isInput
){
d
(
document
).
off
(
"mousedown"
,
this
.
hide
)}
if
(
this
.
forceParse
&&
(
this
.
isInput
&&
this
.
element
.
val
()
||
this
.
hasInput
&&
this
.
element
.
find
(
"input"
).
val
())){
this
.
setValue
()}
this
.
isVisible
=
false
;
this
.
element
.
trigger
({
type
:
"hide"
,
date
:
this
.
date
})},
remove
:
function
(){
this
.
_detachEvents
();
d
(
document
).
off
(
"mousedown"
,
this
.
clickedOutside
);
this
.
picker
.
remove
();
delete
this
.
picker
;
delete
this
.
element
.
data
().
datetimepicker
},
getDate
:
function
(){
var
i
=
this
.
getUTCDate
();
if
(
i
===
null
){
return
null
}
return
new
Date
(
i
.
getTime
()
+
(
i
.
getTimezoneOffset
()
*
60000
))},
getUTCDate
:
function
(){
return
this
.
date
},
getInitialDate
:
function
(){
return
this
.
initialDate
},
setInitialDate
:
function
(
i
){
this
.
initialDate
=
i
},
setDate
:
function
(
i
){
this
.
setUTCDate
(
new
Date
(
i
.
getTime
()
-
(
i
.
getTimezoneOffset
()
*
60000
)))},
setUTCDate
:
function
(
i
){
if
(
i
>=
this
.
startDate
&&
i
<=
this
.
endDate
){
this
.
date
=
i
;
this
.
setValue
();
this
.
viewDate
=
this
.
date
;
this
.
fill
()}
else
{
this
.
element
.
trigger
({
type
:
"outOfRange"
,
date
:
i
,
startDate
:
this
.
startDate
,
endDate
:
this
.
endDate
})}},
setFormat
:
function
(
j
){
this
.
format
=
c
.
parseFormat
(
j
,
this
.
formatType
);
var
i
;
if
(
this
.
isInput
){
i
=
this
.
element
}
else
{
if
(
this
.
component
){
i
=
this
.
element
.
find
(
"input"
)}}
if
(
i
&&
i
.
val
()){
this
.
setValue
()}},
setValue
:
function
(){
var
i
=
this
.
getFormattedDate
();
if
(
!
this
.
isInput
){
if
(
this
.
component
){
this
.
element
.
find
(
"input"
).
val
(
i
)}
this
.
element
.
data
(
"date"
,
i
)}
else
{
this
.
element
.
val
(
i
)}
if
(
this
.
linkField
){
d
(
"#"
+
this
.
linkField
).
val
(
this
.
getFormattedDate
(
this
.
linkFormat
))}},
getFormattedDate
:
function
(
i
){
i
=
i
||
this
.
format
;
return
c
.
formatDate
(
this
.
date
,
i
,
this
.
language
,
this
.
formatType
,
this
.
timezone
)},
setStartDate
:
function
(
i
){
this
.
startDate
=
i
||
this
.
startDate
;
if
(
this
.
startDate
.
valueOf
()
!==
8639968443048000
){
this
.
startDate
=
c
.
parseDate
(
this
.
startDate
,
this
.
format
,
this
.
language
,
this
.
formatType
,
this
.
timezone
)}
this
.
update
();
this
.
updateNavArrows
()},
setEndDate
:
function
(
i
){
this
.
endDate
=
i
||
this
.
endDate
;
if
(
this
.
endDate
.
valueOf
()
!==
8639968443048000
){
this
.
endDate
=
c
.
parseDate
(
this
.
endDate
,
this
.
format
,
this
.
language
,
this
.
formatType
,
this
.
timezone
)}
this
.
update
();
this
.
updateNavArrows
()},
setDatesDisabled
:
function
(
j
){
this
.
datesDisabled
=
j
||
[];
if
(
!
d
.
isArray
(
this
.
datesDisabled
)){
this
.
datesDisabled
=
this
.
datesDisabled
.
split
(
/,
\s
*/
)}
var
i
=
this
;
this
.
datesDisabled
=
d
.
map
(
this
.
datesDisabled
,
function
(
k
){
return
c
.
parseDate
(
k
,
i
.
format
,
i
.
language
,
i
.
formatType
,
i
.
timezone
).
toDateString
()});
this
.
update
();
this
.
updateNavArrows
()},
setTitle
:
function
(
i
,
j
){
return
this
.
picker
.
find
(
i
).
find
(
"th:eq(1)"
).
text
(
this
.
title
===
false
?
j
:
this
.
title
)},
setDaysOfWeekDisabled
:
function
(
i
){
this
.
daysOfWeekDisabled
=
i
||
[];
if
(
!
d
.
isArray
(
this
.
daysOfWeekDisabled
)){
this
.
daysOfWeekDisabled
=
this
.
daysOfWeekDisabled
.
split
(
/,
\s
*/
)}
this
.
daysOfWeekDisabled
=
d
.
map
(
this
.
daysOfWeekDisabled
,
function
(
j
){
return
parseInt
(
j
,
10
)});
this
.
update
();
this
.
updateNavArrows
()},
setMinutesDisabled
:
function
(
i
){
this
.
minutesDisabled
=
i
||
[];
if
(
!
d
.
isArray
(
this
.
minutesDisabled
)){
this
.
minutesDisabled
=
this
.
minutesDisabled
.
split
(
/,
\s
*/
)}
this
.
minutesDisabled
=
d
.
map
(
this
.
minutesDisabled
,
function
(
j
){
return
parseInt
(
j
,
10
)});
this
.
update
();
this
.
updateNavArrows
()},
setHoursDisabled
:
function
(
i
){
this
.
hoursDisabled
=
i
||
[];
if
(
!
d
.
isArray
(
this
.
hoursDisabled
)){
this
.
hoursDisabled
=
this
.
hoursDisabled
.
split
(
/,
\s
*/
)}
this
.
hoursDisabled
=
d
.
map
(
this
.
hoursDisabled
,
function
(
j
){
return
parseInt
(
j
,
10
)});
this
.
update
();
this
.
updateNavArrows
()},
place
:
function
(){
if
(
this
.
isInline
){
return
}
if
(
!
this
.
zIndex
){
var
j
=
0
;
d
(
"div"
).
each
(
function
(){
var
o
=
parseInt
(
d
(
this
).
css
(
"zIndex"
),
10
);
if
(
o
>
j
){
j
=
o
}});
this
.
zIndex
=
j
+
10
}
var
n
,
m
,
l
,
k
;
if
(
this
.
container
instanceof
d
){
k
=
this
.
container
.
offset
()}
else
{
k
=
d
(
this
.
container
).
offset
()}
if
(
this
.
component
){
n
=
this
.
component
.
offset
();
l
=
n
.
left
;
if
(
this
.
pickerPosition
===
"bottom-left"
||
this
.
pickerPosition
===
"top-left"
){
l
+=
this
.
component
.
outerWidth
()
-
this
.
picker
.
outerWidth
()}}
else
{
n
=
this
.
element
.
offset
();
l
=
n
.
left
;
if
(
this
.
pickerPosition
===
"bottom-left"
||
this
.
pickerPosition
===
"top-left"
){
l
+=
this
.
element
.
outerWidth
()
-
this
.
picker
.
outerWidth
()}}
var
i
=
document
.
body
.
clientWidth
||
window
.
innerWidth
;
if
(
l
+
220
>
i
){
l
=
i
-
220
}
if
(
this
.
pickerPosition
===
"top-left"
||
this
.
pickerPosition
===
"top-right"
){
m
=
n
.
top
-
this
.
picker
.
outerHeight
()}
else
{
m
=
n
.
top
+
this
.
height
}
m
=
m
-
k
.
top
;
l
=
l
-
k
.
left
;
this
.
picker
.
css
({
top
:
m
,
left
:
l
,
zIndex
:
this
.
zIndex
})},
hour_minute
:
"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]"
,
update
:
function
(){
var
i
,
j
=
false
;
if
(
arguments
&&
arguments
.
length
&&
(
typeof
arguments
[
0
]
===
"string"
||
arguments
[
0
]
instanceof
Date
)){
i
=
arguments
[
0
];
j
=
true
}
else
{
i
=
(
this
.
isInput
?
this
.
element
.
val
():
this
.
element
.
find
(
"input"
).
val
())
||
this
.
element
.
data
(
"date"
)
||
this
.
initialDate
;
if
(
typeof
i
===
"string"
){
i
=
i
.
replace
(
/^
\s
+|
\s
+$/g
,
""
)}}
if
(
!
i
){
i
=
new
Date
();
j
=
false
}
if
(
typeof
i
===
"string"
){
if
(
new
RegExp
(
this
.
hour_minute
).
test
(
i
)
||
new
RegExp
(
this
.
hour_minute
+
":[0-5][0-9]"
).
test
(
i
)){
i
=
this
.
getDate
()}}
this
.
date
=
c
.
parseDate
(
i
,
this
.
format
,
this
.
language
,
this
.
formatType
,
this
.
timezone
);
if
(
j
){
this
.
setValue
()}
if
(
this
.
date
<
this
.
startDate
){
this
.
viewDate
=
new
Date
(
this
.
startDate
)}
else
{
if
(
this
.
date
>
this
.
endDate
){
this
.
viewDate
=
new
Date
(
this
.
endDate
)}
else
{
this
.
viewDate
=
new
Date
(
this
.
date
)}}
this
.
fill
()},
fillDow
:
function
(){
var
i
=
this
.
weekStart
,
j
=
"<tr>"
;
while
(
i
<
this
.
weekStart
+
7
){
j
+=
'<th class="dow">'
+
e
[
this
.
language
].
daysMin
[(
i
++
)
%
7
]
+
"</th>"
}
j
+=
"</tr>"
;
this
.
picker
.
find
(
".datetimepicker-days thead"
).
append
(
j
)},
fillMonths
:
function
(){
var
l
=
""
;
var
m
=
new
Date
(
this
.
viewDate
);
for
(
var
k
=
0
;
k
<
12
;
k
++
){
m
.
setUTCMonth
(
k
);
var
j
=
this
.
onRenderMonth
(
m
);
l
+=
'<span class="'
+
j
.
join
(
" "
)
+
'">'
+
e
[
this
.
language
].
monthsShort
[
k
]
+
"</span>"
}
this
.
picker
.
find
(
".datetimepicker-months td"
).
html
(
l
)},
fill
:
function
(){
if
(
!
this
.
date
||!
this
.
viewDate
){
return
}
var
E
=
new
Date
(
this
.
viewDate
),
t
=
E
.
getUTCFullYear
(),
G
=
E
.
getUTCMonth
(),
n
=
E
.
getUTCDate
(),
A
=
E
.
getUTCHours
(),
w
=
this
.
startDate
.
getUTCFullYear
(),
B
=
this
.
startDate
.
getUTCMonth
(),
p
=
this
.
endDate
.
getUTCFullYear
(),
x
=
this
.
endDate
.
getUTCMonth
()
+
1
,
q
=
(
new
h
(
this
.
date
.
getUTCFullYear
(),
this
.
date
.
getUTCMonth
(),
this
.
date
.
getUTCDate
())).
valueOf
(),
D
=
new
Date
();
this
.
setTitle
(
".datetimepicker-days"
,
e
[
this
.
language
].
months
[
G
]
+
" "
+
t
);
if
(
this
.
formatViewType
===
"time"
){
var
k
=
this
.
getFormattedDate
();
this
.
setTitle
(
".datetimepicker-hours"
,
k
);
this
.
setTitle
(
".datetimepicker-minutes"
,
k
)}
else
{
this
.
setTitle
(
".datetimepicker-hours"
,
n
+
" "
+
e
[
this
.
language
].
months
[
G
]
+
" "
+
t
);
this
.
setTitle
(
".datetimepicker-minutes"
,
n
+
" "
+
e
[
this
.
language
].
months
[
G
]
+
" "
+
t
)}
this
.
picker
.
find
(
"tfoot th.today"
).
text
(
e
[
this
.
language
].
today
||
e
.
en
.
today
).
toggle
(
this
.
todayBtn
!==
false
);
this
.
picker
.
find
(
"tfoot th.clear"
).
text
(
e
[
this
.
language
].
clear
||
e
.
en
.
clear
).
toggle
(
this
.
clearBtn
!==
false
);
this
.
updateNavArrows
();
this
.
fillMonths
();
var
I
=
h
(
t
,
G
-
1
,
28
,
0
,
0
,
0
,
0
),
z
=
c
.
getDaysInMonth
(
I
.
getUTCFullYear
(),
I
.
getUTCMonth
());
I
.
setUTCDate
(
z
);
I
.
setUTCDate
(
z
-
(
I
.
getUTCDay
()
-
this
.
weekStart
+
7
)
%
7
);
var
j
=
new
Date
(
I
);
j
.
setUTCDate
(
j
.
getUTCDate
()
+
42
);
j
=
j
.
valueOf
();
var
r
=
[];
var
F
;
while
(
I
.
valueOf
()
<
j
){
if
(
I
.
getUTCDay
()
===
this
.
weekStart
){
r
.
push
(
"<tr>"
)}
F
=
this
.
onRenderDay
(
I
);
if
(
I
.
getUTCFullYear
()
<
t
||
(
I
.
getUTCFullYear
()
===
t
&&
I
.
getUTCMonth
()
<
G
)){
F
.
push
(
"old"
)}
else
{
if
(
I
.
getUTCFullYear
()
>
t
||
(
I
.
getUTCFullYear
()
===
t
&&
I
.
getUTCMonth
()
>
G
)){
F
.
push
(
"new"
)}}
if
(
this
.
todayHighlight
&&
I
.
getUTCFullYear
()
===
D
.
getFullYear
()
&&
I
.
getUTCMonth
()
===
D
.
getMonth
()
&&
I
.
getUTCDate
()
===
D
.
getDate
()){
F
.
push
(
"today"
)}
if
(
I
.
valueOf
()
===
q
){
F
.
push
(
"active"
)}
if
((
I
.
valueOf
()
+
86400000
)
<=
this
.
startDate
||
I
.
valueOf
()
>
this
.
endDate
||
d
.
inArray
(
I
.
getUTCDay
(),
this
.
daysOfWeekDisabled
)
!==-
1
||
d
.
inArray
(
I
.
toDateString
(),
this
.
datesDisabled
)
!==-
1
){
F
.
push
(
"disabled"
)}
r
.
push
(
'<td class="'
+
F
.
join
(
" "
)
+
'">'
+
I
.
getUTCDate
()
+
"</td>"
);
if
(
I
.
getUTCDay
()
===
this
.
weekEnd
){
r
.
push
(
"</tr>"
)}
I
.
setUTCDate
(
I
.
getUTCDate
()
+
1
)}
this
.
picker
.
find
(
".datetimepicker-days tbody"
).
empty
().
append
(
r
.
join
(
""
));
r
=
[];
var
u
=
""
,
C
=
""
,
s
=
""
;
var
l
=
this
.
hoursDisabled
||
[];
E
=
new
Date
(
this
.
viewDate
);
for
(
var
y
=
0
;
y
<
24
;
y
++
){
E
.
setUTCHours
(
y
);
F
=
this
.
onRenderHour
(
E
);
if
(
l
.
indexOf
(
y
)
!==-
1
){
F
.
push
(
"disabled"
)}
var
v
=
h
(
t
,
G
,
n
,
y
);
if
((
v
.
valueOf
()
+
3600000
)
<=
this
.
startDate
||
v
.
valueOf
()
>
this
.
endDate
){
F
.
push
(
"disabled"
)}
else
{
if
(
A
===
y
){
F
.
push
(
"active"
)}}
if
(
this
.
showMeridian
&&
e
[
this
.
language
].
meridiem
.
length
===
2
){
C
=
(
y
<
12
?
e
[
this
.
language
].
meridiem
[
0
]:
e
[
this
.
language
].
meridiem
[
1
]);
if
(
C
!==
s
){
if
(
s
!==
""
){
r
.
push
(
"</fieldset>"
)}
r
.
push
(
'<fieldset class="hour"><legend>'
+
C
.
toUpperCase
()
+
"</legend>"
)}
s
=
C
;
u
=
(
y
%
12
?
y
%
12
:
12
);
if
(
y
<
12
){
F
.
push
(
"hour_am"
)}
else
{
F
.
push
(
"hour_pm"
)}
r
.
push
(
'<span class="'
+
F
.
join
(
" "
)
+
'">'
+
u
+
"</span>"
);
if
(
y
===
23
){
r
.
push
(
"</fieldset>"
)}}
else
{
u
=
y
+
":00"
;
r
.
push
(
'<span class="'
+
F
.
join
(
" "
)
+
'">'
+
u
+
"</span>"
)}}
this
.
picker
.
find
(
".datetimepicker-hours td"
).
html
(
r
.
join
(
""
));
r
=
[];
u
=
""
;
C
=
""
;
s
=
""
;
var
m
=
this
.
minutesDisabled
||
[];
E
=
new
Date
(
this
.
viewDate
);
for
(
var
y
=
0
;
y
<
60
;
y
+=
this
.
minuteStep
){
if
(
m
.
indexOf
(
y
)
!==-
1
){
continue
}
E
.
setUTCMinutes
(
y
);
E
.
setUTCSeconds
(
0
);
F
=
this
.
onRenderMinute
(
E
);
if
(
this
.
showMeridian
&&
e
[
this
.
language
].
meridiem
.
length
===
2
){
C
=
(
A
<
12
?
e
[
this
.
language
].
meridiem
[
0
]:
e
[
this
.
language
].
meridiem
[
1
]);
if
(
C
!==
s
){
if
(
s
!==
""
){
r
.
push
(
"</fieldset>"
)}
r
.
push
(
'<fieldset class="minute"><legend>'
+
C
.
toUpperCase
()
+
"</legend>"
)}
s
=
C
;
u
=
(
A
%
12
?
A
%
12
:
12
);
r
.
push
(
'<span class="'
+
F
.
join
(
" "
)
+
'">'
+
u
+
":"
+
(
y
<
10
?
"0"
+
y
:
y
)
+
"</span>"
);
if
(
y
===
59
){
r
.
push
(
"</fieldset>"
)}}
else
{
u
=
y
+
":00"
;
r
.
push
(
'<span class="'
+
F
.
join
(
" "
)
+
'">'
+
A
+
":"
+
(
y
<
10
?
"0"
+
y
:
y
)
+
"</span>"
)}}
this
.
picker
.
find
(
".datetimepicker-minutes td"
).
html
(
r
.
join
(
""
));
var
J
=
this
.
date
.
getUTCFullYear
();
var
o
=
this
.
setTitle
(
".datetimepicker-months"
,
t
).
end
().
find
(
".month"
).
removeClass
(
"active"
);
if
(
J
===
t
){
o
.
eq
(
this
.
date
.
getUTCMonth
()).
addClass
(
"active"
)}
if
(
t
<
w
||
t
>
p
){
o
.
addClass
(
"disabled"
)}
if
(
t
===
w
){
o
.
slice
(
0
,
B
).
addClass
(
"disabled"
)}
if
(
t
===
p
){
o
.
slice
(
x
).
addClass
(
"disabled"
)}
r
=
""
;
t
=
parseInt
(
t
/
10
,
10
)
*
10
;
var
H
=
this
.
setTitle
(
".datetimepicker-years"
,
t
+
"-"
+
(
t
+
9
)).
end
().
find
(
"td"
);
t
-=
1
;
E
=
new
Date
(
this
.
viewDate
);
for
(
var
y
=-
1
;
y
<
11
;
y
++
){
E
.
setUTCFullYear
(
t
);
F
=
this
.
onRenderYear
(
E
);
if
(
y
===-
1
||
y
===
10
){
F
.
push
(
b
)}
r
+=
'<span class="'
+
F
.
join
(
" "
)
+
'">'
+
t
+
"</span>"
;
t
+=
1
}
H
.
html
(
r
);
this
.
place
()},
updateNavArrows
:
function
(){
var
m
=
new
Date
(
this
.
viewDate
),
k
=
m
.
getUTCFullYear
(),
l
=
m
.
getUTCMonth
(),
j
=
m
.
getUTCDate
(),
i
=
m
.
getUTCHours
();
switch
(
this
.
viewMode
){
case
0
:
if
(
k
<=
this
.
startDate
.
getUTCFullYear
()
&&
l
<=
this
.
startDate
.
getUTCMonth
()
&&
j
<=
this
.
startDate
.
getUTCDate
()
&&
i
<=
this
.
startDate
.
getUTCHours
()){
this
.
picker
.
find
(
".prev"
).
css
({
visibility
:
"hidden"
})}
else
{
this
.
picker
.
find
(
".prev"
).
css
({
visibility
:
"visible"
})}
if
(
k
>=
this
.
endDate
.
getUTCFullYear
()
&&
l
>=
this
.
endDate
.
getUTCMonth
()
&&
j
>=
this
.
endDate
.
getUTCDate
()
&&
i
>=
this
.
endDate
.
getUTCHours
()){
this
.
picker
.
find
(
".next"
).
css
({
visibility
:
"hidden"
})}
else
{
this
.
picker
.
find
(
".next"
).
css
({
visibility
:
"visible"
})}
break
;
case
1
:
if
(
k
<=
this
.
startDate
.
getUTCFullYear
()
&&
l
<=
this
.
startDate
.
getUTCMonth
()
&&
j
<=
this
.
startDate
.
getUTCDate
()){
this
.
picker
.
find
(
".prev"
).
css
({
visibility
:
"hidden"
})}
else
{
this
.
picker
.
find
(
".prev"
).
css
({
visibility
:
"visible"
})}
if
(
k
>=
this
.
endDate
.
getUTCFullYear
()
&&
l
>=
this
.
endDate
.
getUTCMonth
()
&&
j
>=
this
.
endDate
.
getUTCDate
()){
this
.
picker
.
find
(
".next"
).
css
({
visibility
:
"hidden"
})}
else
{
this
.
picker
.
find
(
".next"
).
css
({
visibility
:
"visible"
})}
break
;
case
2
:
if
(
k
<=
this
.
startDate
.
getUTCFullYear
()
&&
l
<=
this
.
startDate
.
getUTCMonth
()){
this
.
picker
.
find
(
".prev"
).
css
({
visibility
:
"hidden"
})}
else
{
this
.
picker
.
find
(
".prev"
).
css
({
visibility
:
"visible"
})}
if
(
k
>=
this
.
endDate
.
getUTCFullYear
()
&&
l
>=
this
.
endDate
.
getUTCMonth
()){
this
.
picker
.
find
(
".next"
).
css
({
visibility
:
"hidden"
})}
else
{
this
.
picker
.
find
(
".next"
).
css
({
visibility
:
"visible"
})}
break
;
case
3
:
case
4
:
if
(
k
<=
this
.
startDate
.
getUTCFullYear
()){
this
.
picker
.
find
(
".prev"
).
css
({
visibility
:
"hidden"
})}
else
{
this
.
picker
.
find
(
".prev"
).
css
({
visibility
:
"visible"
})}
if
(
k
>=
this
.
endDate
.
getUTCFullYear
()){
this
.
picker
.
find
(
".next"
).
css
({
visibility
:
"hidden"
})}
else
{
this
.
picker
.
find
(
".next"
).
css
({
visibility
:
"visible"
})}
break
}},
mousewheel
:
function
(
j
){
j
.
preventDefault
();
j
.
stopPropagation
();
if
(
this
.
wheelPause
){
return
}
this
.
wheelPause
=
true
;
var
i
=
j
.
originalEvent
;
var
l
=
i
.
wheelDelta
;
var
k
=
l
>
0
?
1
:(
l
===
0
)?
0
:
-
1
;
if
(
this
.
wheelViewModeNavigationInverseDirection
){
k
=-
k
}
this
.
showMode
(
k
);
setTimeout
(
d
.
proxy
(
function
(){
this
.
wheelPause
=
false
},
this
),
this
.
wheelViewModeNavigationDelay
)},
click
:
function
(
m
){
m
.
stopPropagation
();
m
.
preventDefault
();
var
n
=
d
(
m
.
target
).
closest
(
"span, td, th, legend"
);
if
(
n
.
is
(
"."
+
this
.
icontype
)){
n
=
d
(
n
).
parent
().
closest
(
"span, td, th, legend"
)}
if
(
n
.
length
===
1
){
if
(
n
.
is
(
".disabled"
)){
this
.
element
.
trigger
({
type
:
"outOfRange"
,
date
:
this
.
viewDate
,
startDate
:
this
.
startDate
,
endDate
:
this
.
endDate
});
return
}
switch
(
n
[
0
].
nodeName
.
toLowerCase
()){
case
"th"
:
switch
(
n
[
0
].
className
){
case
"switch"
:
this
.
showMode
(
1
);
break
;
case
"prev"
:
case
"next"
:
var
i
=
c
.
modes
[
this
.
viewMode
].
navStep
*
(
n
[
0
].
className
===
"prev"
?
-
1
:
1
);
switch
(
this
.
viewMode
){
case
0
:
this
.
viewDate
=
this
.
moveHour
(
this
.
viewDate
,
i
);
break
;
case
1
:
this
.
viewDate
=
this
.
moveDate
(
this
.
viewDate
,
i
);
break
;
case
2
:
this
.
viewDate
=
this
.
moveMonth
(
this
.
viewDate
,
i
);
break
;
case
3
:
case
4
:
this
.
viewDate
=
this
.
moveYear
(
this
.
viewDate
,
i
);
break
}
this
.
fill
();
this
.
element
.
trigger
({
type
:
n
[
0
].
className
+
":"
+
this
.
convertViewModeText
(
this
.
viewMode
),
date
:
this
.
viewDate
,
startDate
:
this
.
startDate
,
endDate
:
this
.
endDate
});
break
;
case
"clear"
:
this
.
reset
();
if
(
this
.
autoclose
){
this
.
hide
()}
break
;
case
"today"
:
var
j
=
new
Date
();
j
=
h
(
j
.
getFullYear
(),
j
.
getMonth
(),
j
.
getDate
(),
j
.
getHours
(),
j
.
getMinutes
(),
j
.
getSeconds
(),
0
);
if
(
j
<
this
.
startDate
){
j
=
this
.
startDate
}
else
{
if
(
j
>
this
.
endDate
){
j
=
this
.
endDate
}}
this
.
viewMode
=
this
.
startViewMode
;
this
.
showMode
(
0
);
this
.
_setDate
(
j
);
this
.
fill
();
if
(
this
.
autoclose
){
this
.
hide
()}
break
}
break
;
case
"span"
:
if
(
!
n
.
is
(
".disabled"
)){
var
p
=
this
.
viewDate
.
getUTCFullYear
(),
o
=
this
.
viewDate
.
getUTCMonth
(),
q
=
this
.
viewDate
.
getUTCDate
(),
r
=
this
.
viewDate
.
getUTCHours
(),
k
=
this
.
viewDate
.
getUTCMinutes
(),
s
=
this
.
viewDate
.
getUTCSeconds
();
if
(
n
.
is
(
".month"
)){
this
.
viewDate
.
setUTCDate
(
1
);
o
=
n
.
parent
().
find
(
"span"
).
index
(
n
);
q
=
this
.
viewDate
.
getUTCDate
();
this
.
viewDate
.
setUTCMonth
(
o
);
this
.
element
.
trigger
({
type
:
"changeMonth"
,
date
:
this
.
viewDate
});
if
(
this
.
viewSelect
>=
3
){
this
.
_setDate
(
h
(
p
,
o
,
q
,
r
,
k
,
s
,
0
))}}
else
{
if
(
n
.
is
(
".year"
)){
this
.
viewDate
.
setUTCDate
(
1
);
p
=
parseInt
(
n
.
text
(),
10
)
||
0
;
this
.
viewDate
.
setUTCFullYear
(
p
);
this
.
element
.
trigger
({
type
:
"changeYear"
,
date
:
this
.
viewDate
});
if
(
this
.
viewSelect
>=
4
){
this
.
_setDate
(
h
(
p
,
o
,
q
,
r
,
k
,
s
,
0
))}}
else
{
if
(
n
.
is
(
".hour"
)){
r
=
parseInt
(
n
.
text
(),
10
)
||
0
;
if
(
n
.
hasClass
(
"hour_am"
)
||
n
.
hasClass
(
"hour_pm"
)){
if
(
r
===
12
&&
n
.
hasClass
(
"hour_am"
)){
r
=
0
}
else
{
if
(
r
!==
12
&&
n
.
hasClass
(
"hour_pm"
)){
r
+=
12
}}}
this
.
viewDate
.
setUTCHours
(
r
);
this
.
element
.
trigger
({
type
:
"changeHour"
,
date
:
this
.
viewDate
});
if
(
this
.
viewSelect
>=
1
){
this
.
_setDate
(
h
(
p
,
o
,
q
,
r
,
k
,
s
,
0
))}}
else
{
if
(
n
.
is
(
".minute"
)){
k
=
parseInt
(
n
.
text
().
substr
(
n
.
text
().
indexOf
(
":"
)
+
1
),
10
)
||
0
;
this
.
viewDate
.
setUTCMinutes
(
k
);
this
.
element
.
trigger
({
type
:
"changeMinute"
,
date
:
this
.
viewDate
});
if
(
this
.
viewSelect
>=
0
){
this
.
_setDate
(
h
(
p
,
o
,
q
,
r
,
k
,
s
,
0
))}}}}}
if
(
this
.
viewMode
!==
0
){
var
l
=
this
.
viewMode
;
this
.
showMode
(
-
1
);
this
.
fill
();
if
(
l
===
this
.
viewMode
&&
this
.
autoclose
){
this
.
hide
()}}
else
{
this
.
fill
();
if
(
this
.
autoclose
){
this
.
hide
()}}}
break
;
case
"td"
:
if
(
n
.
is
(
".day"
)
&&!
n
.
is
(
".disabled"
)){
var
q
=
parseInt
(
n
.
text
(),
10
)
||
1
;
var
p
=
this
.
viewDate
.
getUTCFullYear
(),
o
=
this
.
viewDate
.
getUTCMonth
(),
r
=
this
.
viewDate
.
getUTCHours
(),
k
=
this
.
viewDate
.
getUTCMinutes
(),
s
=
this
.
viewDate
.
getUTCSeconds
();
if
(
n
.
is
(
".old"
)){
if
(
o
===
0
){
o
=
11
;
p
-=
1
}
else
{
o
-=
1
}}
else
{
if
(
n
.
is
(
".new"
)){
if
(
o
===
11
){
o
=
0
;
p
+=
1
}
else
{
o
+=
1
}}}
this
.
viewDate
.
setUTCFullYear
(
p
);
this
.
viewDate
.
setUTCMonth
(
o
,
q
);
this
.
element
.
trigger
({
type
:
"changeDay"
,
date
:
this
.
viewDate
});
if
(
this
.
viewSelect
>=
2
){
this
.
_setDate
(
h
(
p
,
o
,
q
,
r
,
k
,
s
,
0
))}}
var
l
=
this
.
viewMode
;
this
.
showMode
(
-
1
);
this
.
fill
();
if
(
l
===
this
.
viewMode
&&
this
.
autoclose
){
this
.
hide
()}
break
}}},
_setDate
:
function
(
i
,
k
){
if
(
!
k
||
k
===
"date"
){
this
.
date
=
i
}
if
(
!
k
||
k
===
"view"
){
this
.
viewDate
=
i
}
this
.
fill
();
this
.
setValue
();
var
j
;
if
(
this
.
isInput
){
j
=
this
.
element
}
else
{
if
(
this
.
component
){
j
=
this
.
element
.
find
(
"input"
)}}
if
(
j
){
j
.
change
()}
this
.
element
.
trigger
({
type
:
"changeDate"
,
date
:
this
.
getDate
()});
if
(
i
===
null
){
this
.
date
=
this
.
viewDate
}},
moveMinute
:
function
(
j
,
i
){
if
(
!
i
){
return
j
}
var
k
=
new
Date
(
j
.
valueOf
());
k
.
setUTCMinutes
(
k
.
getUTCMinutes
()
+
(
i
*
this
.
minuteStep
));
return
k
},
moveHour
:
function
(
j
,
i
){
if
(
!
i
){
return
j
}
var
k
=
new
Date
(
j
.
valueOf
());
k
.
setUTCHours
(
k
.
getUTCHours
()
+
i
);
return
k
},
moveDate
:
function
(
j
,
i
){
if
(
!
i
){
return
j
}
var
k
=
new
Date
(
j
.
valueOf
());
k
.
setUTCDate
(
k
.
getUTCDate
()
+
i
);
return
k
},
moveMonth
:
function
(
j
,
k
){
if
(
!
k
){
return
j
}
var
n
=
new
Date
(
j
.
valueOf
()),
r
=
n
.
getUTCDate
(),
o
=
n
.
getUTCMonth
(),
m
=
Math
.
abs
(
k
),
q
,
p
;
k
=
k
>
0
?
1
:
-
1
;
if
(
m
===
1
){
p
=
k
===-
1
?
function
(){
return
n
.
getUTCMonth
()
===
o
}:
function
(){
return
n
.
getUTCMonth
()
!==
q
};
q
=
o
+
k
;
n
.
setUTCMonth
(
q
);
if
(
q
<
0
||
q
>
11
){
q
=
(
q
+
12
)
%
12
}}
else
{
for
(
var
l
=
0
;
l
<
m
;
l
++
){
n
=
this
.
moveMonth
(
n
,
k
)}
q
=
n
.
getUTCMonth
();
n
.
setUTCDate
(
r
);
p
=
function
(){
return
q
!==
n
.
getUTCMonth
()}}
while
(
p
()){
n
.
setUTCDate
(
--
r
);
n
.
setUTCMonth
(
q
)}
return
n
},
moveYear
:
function
(
j
,
i
){
return
this
.
moveMonth
(
j
,
i
*
12
)},
dateWithinRange
:
function
(
i
){
return
i
>=
this
.
startDate
&&
i
<=
this
.
endDate
},
keydown
:
function
(
o
){
if
(
this
.
picker
.
is
(
":not(:visible)"
)){
if
(
o
.
keyCode
===
27
){
this
.
show
()}
return
}
var
k
=
false
,
j
,
i
,
n
;
switch
(
o
.
keyCode
){
case
27
:
this
.
hide
();
o
.
preventDefault
();
break
;
case
37
:
case
39
:
if
(
!
this
.
keyboardNavigation
){
break
}
j
=
o
.
keyCode
===
37
?
-
1
:
1
;
var
m
=
this
.
viewMode
;
if
(
o
.
ctrlKey
){
m
+=
2
}
else
{
if
(
o
.
shiftKey
){
m
+=
1
}}
if
(
m
===
4
){
i
=
this
.
moveYear
(
this
.
date
,
j
);
n
=
this
.
moveYear
(
this
.
viewDate
,
j
)}
else
{
if
(
m
===
3
){
i
=
this
.
moveMonth
(
this
.
date
,
j
);
n
=
this
.
moveMonth
(
this
.
viewDate
,
j
)}
else
{
if
(
m
===
2
){
i
=
this
.
moveDate
(
this
.
date
,
j
);
n
=
this
.
moveDate
(
this
.
viewDate
,
j
)}
else
{
if
(
m
===
1
){
i
=
this
.
moveHour
(
this
.
date
,
j
);
n
=
this
.
moveHour
(
this
.
viewDate
,
j
)}
else
{
if
(
m
===
0
){
i
=
this
.
moveMinute
(
this
.
date
,
j
);
n
=
this
.
moveMinute
(
this
.
viewDate
,
j
)}}}}}
if
(
this
.
dateWithinRange
(
i
)){
this
.
date
=
i
;
this
.
viewDate
=
n
;
this
.
setValue
();
this
.
update
();
o
.
preventDefault
();
k
=
true
}
break
;
case
38
:
case
40
:
if
(
!
this
.
keyboardNavigation
){
break
}
j
=
o
.
keyCode
===
38
?
-
1
:
1
;
m
=
this
.
viewMode
;
if
(
o
.
ctrlKey
){
m
+=
2
}
else
{
if
(
o
.
shiftKey
){
m
+=
1
}}
if
(
m
===
4
){
i
=
this
.
moveYear
(
this
.
date
,
j
);
n
=
this
.
moveYear
(
this
.
viewDate
,
j
)}
else
{
if
(
m
===
3
){
i
=
this
.
moveMonth
(
this
.
date
,
j
);
n
=
this
.
moveMonth
(
this
.
viewDate
,
j
)}
else
{
if
(
m
===
2
){
i
=
this
.
moveDate
(
this
.
date
,
j
*
7
);
n
=
this
.
moveDate
(
this
.
viewDate
,
j
*
7
)}
else
{
if
(
m
===
1
){
if
(
this
.
showMeridian
){
i
=
this
.
moveHour
(
this
.
date
,
j
*
6
);
n
=
this
.
moveHour
(
this
.
viewDate
,
j
*
6
)}
else
{
i
=
this
.
moveHour
(
this
.
date
,
j
*
4
);
n
=
this
.
moveHour
(
this
.
viewDate
,
j
*
4
)}}
else
{
if
(
m
===
0
){
i
=
this
.
moveMinute
(
this
.
date
,
j
*
4
);
n
=
this
.
moveMinute
(
this
.
viewDate
,
j
*
4
)}}}}}
if
(
this
.
dateWithinRange
(
i
)){
this
.
date
=
i
;
this
.
viewDate
=
n
;
this
.
setValue
();
this
.
update
();
o
.
preventDefault
();
k
=
true
}
break
;
case
13
:
if
(
this
.
viewMode
!==
0
){
var
p
=
this
.
viewMode
;
this
.
showMode
(
-
1
);
this
.
fill
();
if
(
p
===
this
.
viewMode
&&
this
.
autoclose
){
this
.
hide
()}}
else
{
this
.
fill
();
if
(
this
.
autoclose
){
this
.
hide
()}}
o
.
preventDefault
();
break
;
case
9
:
this
.
hide
();
break
}
if
(
k
){
var
l
;
if
(
this
.
isInput
){
l
=
this
.
element
}
else
{
if
(
this
.
component
){
l
=
this
.
element
.
find
(
"input"
)}}
if
(
l
){
l
.
change
()}
this
.
element
.
trigger
({
type
:
"changeDate"
,
date
:
this
.
getDate
()})}},
showMode
:
function
(
i
){
if
(
i
){
var
j
=
Math
.
max
(
0
,
Math
.
min
(
c
.
modes
.
length
-
1
,
this
.
viewMode
+
i
));
if
(
j
>=
this
.
minView
&&
j
<=
this
.
maxView
){
this
.
element
.
trigger
({
type
:
"changeMode"
,
date
:
this
.
viewDate
,
oldViewMode
:
this
.
viewMode
,
newViewMode
:
j
});
this
.
viewMode
=
j
}}
this
.
picker
.
find
(
">div"
).
hide
().
filter
(
".datetimepicker-"
+
c
.
modes
[
this
.
viewMode
].
clsName
).
css
(
"display"
,
"block"
);
this
.
updateNavArrows
()},
reset
:
function
(){
this
.
_setDate
(
null
,
"date"
)},
convertViewModeText
:
function
(
i
){
switch
(
i
){
case
4
:
return
"decade"
;
case
3
:
return
"year"
;
case
2
:
return
"month"
;
case
1
:
return
"day"
;
case
0
:
return
"hour"
}}};
var
b
=
d
.
fn
.
datetimepicker
;
d
.
fn
.
datetimepicker
=
function
(
k
){
var
i
=
Array
.
apply
(
null
,
arguments
);
i
.
shift
();
var
j
;
this
.
each
(
function
(){
var
n
=
d
(
this
),
m
=
n
.
data
(
"datetimepicker"
),
l
=
typeof
k
===
"object"
&&
k
;
if
(
!
m
){
n
.
data
(
"datetimepicker"
,(
m
=
new
g
(
this
,
d
.
extend
({},
d
.
fn
.
datetimepicker
.
defaults
,
l
))))}
if
(
typeof
k
===
"string"
&&
typeof
m
[
k
]
===
"function"
){
j
=
m
[
k
].
apply
(
m
,
i
);
if
(
j
!==
f
){
return
false
}}});
if
(
j
!==
f
){
return
j
}
else
{
return
this
}};
d
.
fn
.
datetimepicker
.
defaults
=
{};
d
.
fn
.
datetimepicker
.
Constructor
=
g
;
var
e
=
d
.
fn
.
datetimepicker
.
dates
=
{
en
:{
days
:[
"Sunday"
,
"Monday"
,
"Tuesday"
,
"Wednesday"
,
"Thursday"
,
"Friday"
,
"Saturday"
,
"Sunday"
],
daysShort
:[
"Sun"
,
"Mon"
,
"Tue"
,
"Wed"
,
"Thu"
,
"Fri"
,
"Sat"
,
"Sun"
],
daysMin
:[
"Su"
,
"Mo"
,
"Tu"
,
"We"
,
"Th"
,
"Fr"
,
"Sa"
,
"Su"
],
months
:[
"January"
,
"February"
,
"March"
,
"April"
,
"May"
,
"June"
,
"July"
,
"August"
,
"September"
,
"October"
,
"November"
,
"December"
],
monthsShort
:[
"Jan"
,
"Feb"
,
"Mar"
,
"Apr"
,
"May"
,
"Jun"
,
"Jul"
,
"Aug"
,
"Sep"
,
"Oct"
,
"Nov"
,
"Dec"
],
meridiem
:[
"am"
,
"pm"
],
suffix
:[
"st"
,
"nd"
,
"rd"
,
"th"
],
today
:
"Today"
,
clear
:
"Clear"
}};
var
c
=
{
modes
:[{
clsName
:
"minutes"
,
navFnc
:
"Hours"
,
navStep
:
1
},{
clsName
:
"hours"
,
navFnc
:
"Date"
,
navStep
:
1
},{
clsName
:
"days"
,
navFnc
:
"Month"
,
navStep
:
1
},{
clsName
:
"months"
,
navFnc
:
"FullYear"
,
navStep
:
1
},{
clsName
:
"years"
,
navFnc
:
"FullYear"
,
navStep
:
10
}],
isLeapYear
:
function
(
i
){
return
(((
i
%
4
===
0
)
&&
(
i
%
100
!==
0
))
||
(
i
%
400
===
0
))},
getDaysInMonth
:
function
(
i
,
j
){
return
[
31
,(
c
.
isLeapYear
(
i
)?
29
:
28
),
31
,
30
,
31
,
30
,
31
,
31
,
30
,
31
,
30
,
31
][
j
]},
getDefaultFormat
:
function
(
i
,
j
){
if
(
i
===
"standard"
){
if
(
j
===
"input"
){
return
"yyyy-mm-dd hh:ii"
}
else
{
return
"yyyy-mm-dd hh:ii:ss"
}}
else
{
if
(
i
===
"php"
){
if
(
j
===
"input"
){
return
"Y-m-d H:i"
}
else
{
return
"Y-m-d H:i:s"
}}
else
{
throw
new
Error
(
"Invalid format type."
)}}},
validParts
:
function
(
i
){
if
(
i
===
"standard"
){
return
/t|hh
?
|HH
?
|p|P|z|Z|ii
?
|ss
?
|dd
?
|DD
?
|mm
?
|MM
?
|yy
(?:
yy
)?
/g
}
else
{
if
(
i
===
"php"
){
return
/
[
dDjlNwzFmMnStyYaABgGhHis
]
/g
}
else
{
throw
new
Error
(
"Invalid format type."
)}}},
nonpunctuation
:
/
[^
-
\/
:-@
\[
-`{-~
\t\n\r
TZ
]
+/g
,
parseFormat
:
function
(
l
,
j
){
var
i
=
l
.
replace
(
this
.
validParts
(
j
),
"
\
0"
).
split
(
"
\
0"
),
k
=
l
.
match
(
this
.
validParts
(
j
));
if
(
!
i
||!
i
.
length
||!
k
||
k
.
length
===
0
){
throw
new
Error
(
"Invalid date format."
)}
return
{
separators
:
i
,
parts
:
k
}},
parseDate
:
function
(
A
,
y
,
v
,
j
,
r
){
if
(
A
instanceof
Date
){
var
u
=
new
Date
(
A
.
valueOf
()
-
A
.
getTimezoneOffset
()
*
60000
);
u
.
setMilliseconds
(
0
);
return
u
}
if
(
/^
\d{4}\-\d{1,2}\-\d{1,2}
$/
.
test
(
A
)){
y
=
this
.
parseFormat
(
"yyyy-mm-dd"
,
j
)}
if
(
/^
\d{4}\-\d{1,2}\-\d{1,2}[
T
]\d{1,2}\:\d{1,2}
$/
.
test
(
A
)){
y
=
this
.
parseFormat
(
"yyyy-mm-dd hh:ii"
,
j
)}
if
(
/^
\d{4}\-\d{1,2}\-\d{1,2}[
T
]\d{1,2}\:\d{1,2}\:\d{1,2}[
Z
]{0,1}
$/
.
test
(
A
)){
y
=
this
.
parseFormat
(
"yyyy-mm-dd hh:ii:ss"
,
j
)}
if
(
/^
[
-+
]\d
+
[
dmwy
]([\s
,
]
+
[
-+
]\d
+
[
dmwy
])
*$/
.
test
(
A
)){
var
l
=
/
([
-+
]\d
+
)([
dmwy
])
/
,
q
=
A
.
match
(
/
([
-+
]\d
+
)([
dmwy
])
/g
),
t
,
p
;
A
=
new
Date
();
for
(
var
x
=
0
;
x
<
q
.
length
;
x
++
){
t
=
l
.
exec
(
q
[
x
]);
p
=
parseInt
(
t
[
1
]);
switch
(
t
[
2
]){
case
"d"
:
A
.
setUTCDate
(
A
.
getUTCDate
()
+
p
);
break
;
case
"m"
:
A
=
g
.
prototype
.
moveMonth
.
call
(
g
.
prototype
,
A
,
p
);
break
;
case
"w"
:
A
.
setUTCDate
(
A
.
getUTCDate
()
+
p
*
7
);
break
;
case
"y"
:
A
=
g
.
prototype
.
moveYear
.
call
(
g
.
prototype
,
A
,
p
);
break
}}
return
h
(
A
.
getUTCFullYear
(),
A
.
getUTCMonth
(),
A
.
getUTCDate
(),
A
.
getUTCHours
(),
A
.
getUTCMinutes
(),
A
.
getUTCSeconds
(),
0
)}
var
q
=
A
&&
A
.
toString
().
match
(
this
.
nonpunctuation
)
||
[],
A
=
new
Date
(
0
,
0
,
0
,
0
,
0
,
0
,
0
),
m
=
{},
z
=
[
"hh"
,
"h"
,
"ii"
,
"i"
,
"ss"
,
"s"
,
"yyyy"
,
"yy"
,
"M"
,
"MM"
,
"m"
,
"mm"
,
"D"
,
"DD"
,
"d"
,
"dd"
,
"H"
,
"HH"
,
"p"
,
"P"
,
"z"
,
"Z"
],
o
=
{
hh
:
function
(
s
,
i
){
return
s
.
setUTCHours
(
i
)},
h
:
function
(
s
,
i
){
return
s
.
setUTCHours
(
i
)},
HH
:
function
(
s
,
i
){
return
s
.
setUTCHours
(
i
===
12
?
0
:
i
)},
H
:
function
(
s
,
i
){
return
s
.
setUTCHours
(
i
===
12
?
0
:
i
)},
ii
:
function
(
s
,
i
){
return
s
.
setUTCMinutes
(
i
)},
i
:
function
(
s
,
i
){
return
s
.
setUTCMinutes
(
i
)},
ss
:
function
(
s
,
i
){
return
s
.
setUTCSeconds
(
i
)},
s
:
function
(
s
,
i
){
return
s
.
setUTCSeconds
(
i
)},
yyyy
:
function
(
s
,
i
){
return
s
.
setUTCFullYear
(
i
)},
yy
:
function
(
s
,
i
){
return
s
.
setUTCFullYear
(
2000
+
i
)},
m
:
function
(
s
,
i
){
i
-=
1
;
while
(
i
<
0
){
i
+=
12
}
i
%=
12
;
s
.
setUTCMonth
(
i
);
while
(
s
.
getUTCMonth
()
!==
i
){
if
(
isNaN
(
s
.
getUTCMonth
())){
return
s
}
else
{
s
.
setUTCDate
(
s
.
getUTCDate
()
-
1
)}}
return
s
},
d
:
function
(
s
,
i
){
return
s
.
setUTCDate
(
i
)},
p
:
function
(
s
,
i
){
return
s
.
setUTCHours
(
i
===
1
?
s
.
getUTCHours
()
+
12
:
s
.
getUTCHours
())},
z
:
function
(){
return
r
}},
B
,
k
,
t
;
o
.
M
=
o
.
MM
=
o
.
mm
=
o
.
m
;
o
.
dd
=
o
.
d
;
o
.
P
=
o
.
p
;
o
.
Z
=
o
.
z
;
A
=
h
(
A
.
getFullYear
(),
A
.
getMonth
(),
A
.
getDate
(),
A
.
getHours
(),
A
.
getMinutes
(),
A
.
getSeconds
());
if
(
q
.
length
===
y
.
parts
.
length
){
for
(
var
x
=
0
,
w
=
y
.
parts
.
length
;
x
<
w
;
x
++
){
B
=
parseInt
(
q
[
x
],
10
);
t
=
y
.
parts
[
x
];
if
(
isNaN
(
B
)){
switch
(
t
){
case
"MM"
:
k
=
d
(
e
[
v
].
months
).
filter
(
function
(){
var
i
=
this
.
slice
(
0
,
q
[
x
].
length
),
s
=
q
[
x
].
slice
(
0
,
i
.
length
);
return
i
===
s
});
B
=
d
.
inArray
(
k
[
0
],
e
[
v
].
months
)
+
1
;
break
;
case
"M"
:
k
=
d
(
e
[
v
].
monthsShort
).
filter
(
function
(){
var
i
=
this
.
slice
(
0
,
q
[
x
].
length
),
s
=
q
[
x
].
slice
(
0
,
i
.
length
);
return
i
.
toLowerCase
()
===
s
.
toLowerCase
()});
B
=
d
.
inArray
(
k
[
0
],
e
[
v
].
monthsShort
)
+
1
;
break
;
case
"p"
:
case
"P"
:
B
=
d
.
inArray
(
q
[
x
].
toLowerCase
(),
e
[
v
].
meridiem
);
break
;
case
"z"
:
case
"Z"
:
r
;
break
}}
m
[
t
]
=
B
}
for
(
var
x
=
0
,
n
;
x
<
z
.
length
;
x
++
){
n
=
z
[
x
];
if
(
n
in
m
&&!
isNaN
(
m
[
n
])){
o
[
n
](
A
,
m
[
n
])}}}
return
A
},
formatDate
:
function
(
l
,
q
,
m
,
p
,
o
){
if
(
l
===
null
){
return
""
}
var
k
;
if
(
p
===
"standard"
){
k
=
{
t
:
l
.
getTime
(),
yy
:
l
.
getUTCFullYear
().
toString
().
substring
(
2
),
yyyy
:
l
.
getUTCFullYear
(),
m
:
l
.
getUTCMonth
()
+
1
,
M
:
e
[
m
].
monthsShort
[
l
.
getUTCMonth
()],
MM
:
e
[
m
].
months
[
l
.
getUTCMonth
()],
d
:
l
.
getUTCDate
(),
D
:
e
[
m
].
daysShort
[
l
.
getUTCDay
()],
DD
:
e
[
m
].
days
[
l
.
getUTCDay
()],
p
:(
e
[
m
].
meridiem
.
length
===
2
?
e
[
m
].
meridiem
[
l
.
getUTCHours
()
<
12
?
0
:
1
]:
""
),
h
:
l
.
getUTCHours
(),
i
:
l
.
getUTCMinutes
(),
s
:
l
.
getUTCSeconds
(),
z
:
o
};
if
(
e
[
m
].
meridiem
.
length
===
2
){
k
.
H
=
(
k
.
h
%
12
===
0
?
12
:
k
.
h
%
12
)}
else
{
k
.
H
=
k
.
h
}
k
.
HH
=
(
k
.
H
<
10
?
"0"
:
""
)
+
k
.
H
;
k
.
P
=
k
.
p
.
toUpperCase
();
k
.
Z
=
k
.
z
;
k
.
hh
=
(
k
.
h
<
10
?
"0"
:
""
)
+
k
.
h
;
k
.
ii
=
(
k
.
i
<
10
?
"0"
:
""
)
+
k
.
i
;
k
.
ss
=
(
k
.
s
<
10
?
"0"
:
""
)
+
k
.
s
;
k
.
dd
=
(
k
.
d
<
10
?
"0"
:
""
)
+
k
.
d
;
k
.
mm
=
(
k
.
m
<
10
?
"0"
:
""
)
+
k
.
m
}
else
{
if
(
p
===
"php"
){
k
=
{
y
:
l
.
getUTCFullYear
().
toString
().
substring
(
2
),
Y
:
l
.
getUTCFullYear
(),
F
:
e
[
m
].
months
[
l
.
getUTCMonth
()],
M
:
e
[
m
].
monthsShort
[
l
.
getUTCMonth
()],
n
:
l
.
getUTCMonth
()
+
1
,
t
:
c
.
getDaysInMonth
(
l
.
getUTCFullYear
(),
l
.
getUTCMonth
()),
j
:
l
.
getUTCDate
(),
l
:
e
[
m
].
days
[
l
.
getUTCDay
()],
D
:
e
[
m
].
daysShort
[
l
.
getUTCDay
()],
w
:
l
.
getUTCDay
(),
N
:(
l
.
getUTCDay
()
===
0
?
7
:
l
.
getUTCDay
()),
S
:(
l
.
getUTCDate
()
%
10
<=
e
[
m
].
suffix
.
length
?
e
[
m
].
suffix
[
l
.
getUTCDate
()
%
10
-
1
]:
""
),
a
:(
e
[
m
].
meridiem
.
length
===
2
?
e
[
m
].
meridiem
[
l
.
getUTCHours
()
<
12
?
0
:
1
]:
""
),
g
:(
l
.
getUTCHours
()
%
12
===
0
?
12
:
l
.
getUTCHours
()
%
12
),
G
:
l
.
getUTCHours
(),
i
:
l
.
getUTCMinutes
(),
s
:
l
.
getUTCSeconds
()};
k
.
m
=
(
k
.
n
<
10
?
"0"
:
""
)
+
k
.
n
;
k
.
d
=
(
k
.
j
<
10
?
"0"
:
""
)
+
k
.
j
;
k
.
A
=
k
.
a
.
toString
().
toUpperCase
();
k
.
h
=
(
k
.
g
<
10
?
"0"
:
""
)
+
k
.
g
;
k
.
H
=
(
k
.
G
<
10
?
"0"
:
""
)
+
k
.
G
;
k
.
i
=
(
k
.
i
<
10
?
"0"
:
""
)
+
k
.
i
;
k
.
s
=
(
k
.
s
<
10
?
"0"
:
""
)
+
k
.
s
}
else
{
throw
new
Error
(
"Invalid format type."
)}}
var
l
=
[],
r
=
d
.
extend
([],
q
.
separators
);
for
(
var
n
=
0
,
j
=
q
.
parts
.
length
;
n
<
j
;
n
++
){
if
(
r
.
length
){
l
.
push
(
r
.
shift
())}
l
.
push
(
k
[
q
.
parts
[
n
]])}
if
(
r
.
length
){
l
.
push
(
r
.
shift
())}
return
l
.
join
(
""
)},
convertViewMode
:
function
(
i
){
switch
(
i
){
case
4
:
case
"decade"
:
i
=
4
;
break
;
case
3
:
case
"year"
:
i
=
3
;
break
;
case
2
:
case
"month"
:
i
=
2
;
break
;
case
1
:
case
"day"
:
i
=
1
;
break
;
case
0
:
case
"hour"
:
i
=
0
;
break
}
return
i
},
headTemplate
:
'<thead><tr><th class="prev"><i class="{iconType} {leftArrow}"/></th><th colspan="5" class="switch"></th><th class="next"><i class="{iconType} {rightArrow}"/></th></tr></thead>'
,
headTemplateV3
:
'<thead><tr><th class="prev"><span class="{iconType} {leftArrow}"></span> </th><th colspan="5" class="switch"></th><th class="next"><span class="{iconType} {rightArrow}"></span> </th></tr></thead>'
,
contTemplate
:
'<tbody><tr><td colspan="7"></td></tr></tbody>'
,
footTemplate
:
'<tfoot><tr><th colspan="7" class="today"></th></tr><tr><th colspan="7" class="clear"></th></tr></tfoot>'
};
c
.
template
=
'<div class="datetimepicker"><div class="datetimepicker-minutes"><table class=" table-condensed">'
+
c
.
headTemplate
+
c
.
contTemplate
+
c
.
footTemplate
+
'</table></div><div class="datetimepicker-hours"><table class=" table-condensed">'
+
c
.
headTemplate
+
c
.
contTemplate
+
c
.
footTemplate
+
'</table></div><div class="datetimepicker-days"><table class=" table-condensed">'
+
c
.
headTemplate
+
"<tbody></tbody>"
+
c
.
footTemplate
+
'</table></div><div class="datetimepicker-months"><table class="table-condensed">'
+
c
.
headTemplate
+
c
.
contTemplate
+
c
.
footTemplate
+
'</table></div><div class="datetimepicker-years"><table class="table-condensed">'
+
c
.
headTemplate
+
c
.
contTemplate
+
c
.
footTemplate
+
"</table></div></div>"
;
c
.
templateV3
=
'<div class="datetimepicker"><div class="datetimepicker-minutes"><table class=" table-condensed">'
+
c
.
headTemplateV3
+
c
.
contTemplate
+
c
.
footTemplate
+
'</table></div><div class="datetimepicker-hours"><table class=" table-condensed">'
+
c
.
headTemplateV3
+
c
.
contTemplate
+
c
.
footTemplate
+
'</table></div><div class="datetimepicker-days"><table class=" table-condensed">'
+
c
.
headTemplateV3
+
"<tbody></tbody>"
+
c
.
footTemplate
+
'</table></div><div class="datetimepicker-months"><table class="table-condensed">'
+
c
.
headTemplateV3
+
c
.
contTemplate
+
c
.
footTemplate
+
'</table></div><div class="datetimepicker-years"><table class="table-condensed">'
+
c
.
headTemplateV3
+
c
.
contTemplate
+
c
.
footTemplate
+
"</table></div></div>"
;
d
.
fn
.
datetimepicker
.
DPGlobal
=
c
;
d
.
fn
.
datetimepicker
.
noConflict
=
function
(){
d
.
fn
.
datetimepicker
=
b
;
return
this
};
d
(
document
).
on
(
"focus.datetimepicker.data-api click.datetimepicker.data-api"
,
'[data-provide="datetimepicker"]'
,
function
(
j
){
var
i
=
d
(
this
);
if
(
i
.
data
(
"datetimepicker"
)){
return
}
j
.
preventDefault
();
i
.
datetimepicker
(
"show"
)});
d
(
function
(){
d
(
'[data-provide="datetimepicker-inline"]'
).
datetimepicker
()})}));
\ No newline at end of file
(
function
(
factory
){
if
(
typeof
define
===
"function"
&&
define
.
amd
){
define
([
"jquery"
],
factory
)}
else
{
if
(
typeof
exports
===
"object"
){
factory
(
require
(
"jquery"
))}
else
{
factory
(
jQuery
)}}}(
function
(
$
,
undefined
){
if
(
!
(
"indexOf"
in
Array
.
prototype
)){
Array
.
prototype
.
indexOf
=
function
(
find
,
i
){
if
(
i
===
undefined
){
i
=
0
}
if
(
i
<
0
){
i
+=
this
.
length
}
if
(
i
<
0
){
i
=
0
}
for
(
var
n
=
this
.
length
;
i
<
n
;
i
++
){
if
(
i
in
this
&&
this
[
i
]
===
find
){
return
i
}}
return
-
1
}}
function
timeZoneAbbreviation
(){
var
abbreviation
,
date
,
formattedStr
,
i
,
len
,
matchedStrings
,
ref
,
str
;
date
=
(
new
Date
()).
toString
();
formattedStr
=
((
ref
=
date
.
split
(
"("
)[
1
])
!=
null
?
ref
.
slice
(
0
,
-
1
):
0
)
||
date
.
split
(
" "
);
if
(
formattedStr
instanceof
Array
){
matchedStrings
=
[];
for
(
var
i
=
0
,
len
=
formattedStr
.
length
;
i
<
len
;
i
++
){
str
=
formattedStr
[
i
];
if
((
abbreviation
=
(
ref
=
str
.
match
(
/
\b[
A-Z
]
+
\b
/
))
!==
null
)?
ref
[
0
]:
0
){
matchedStrings
.
push
(
abbreviation
)}}
formattedStr
=
matchedStrings
.
pop
()}
return
formattedStr
}
function
UTCDate
(){
return
new
Date
(
Date
.
UTC
.
apply
(
Date
,
arguments
))}
var
Datetimepicker
=
function
(
element
,
options
){
var
that
=
this
;
this
.
element
=
$
(
element
);
this
.
container
=
options
.
container
||
"body"
;
this
.
language
=
options
.
language
||
this
.
element
.
data
(
"date-language"
)
||
"zh-cn"
;
this
.
language
=
this
.
language
in
dates
?
this
.
language
:
this
.
language
.
split
(
"-"
)[
0
];
this
.
language
=
this
.
language
in
dates
?
this
.
language
:
"en"
;
this
.
isRTL
=
dates
[
this
.
language
].
rtl
||
false
;
this
.
formatType
=
options
.
formatType
||
this
.
element
.
data
(
"format-type"
)
||
"standard"
;
this
.
format
=
DPGlobal
.
parseFormat
(
options
.
format
||
this
.
element
.
data
(
"date-format"
)
||
dates
[
this
.
language
].
format
||
DPGlobal
.
getDefaultFormat
(
this
.
formatType
,
"input"
),
this
.
formatType
);
this
.
isInline
=
false
;
this
.
isVisible
=
false
;
this
.
isInput
=
this
.
element
.
is
(
"input"
);
this
.
fontAwesome
=
options
.
fontAwesome
||
this
.
element
.
data
(
"font-awesome"
)
||
false
;
this
.
bootcssVer
=
options
.
bootcssVer
||
(
this
.
isInput
?(
this
.
element
.
is
(
".form-control"
)?
3
:
2
):(
this
.
bootcssVer
=
this
.
element
.
is
(
".input-group"
)?
3
:
2
));
this
.
component
=
this
.
element
.
is
(
".date"
)?(
this
.
bootcssVer
===
3
?
this
.
element
.
find
(
".input-group-addon .glyphicon-th, .input-group-addon .glyphicon-time, .input-group-addon .glyphicon-remove, .input-group-addon .glyphicon-calendar, .input-group-addon .fa-calendar, .input-group-addon .fa-clock-o"
).
parent
():
this
.
element
.
find
(
".add-on .icon-th, .add-on .icon-time, .add-on .icon-calendar, .add-on .fa-calendar, .add-on .fa-clock-o"
).
parent
()):
false
;
this
.
componentReset
=
this
.
element
.
is
(
".date"
)?(
this
.
bootcssVer
===
3
?
this
.
element
.
find
(
".input-group-addon .glyphicon-remove, .input-group-addon .fa-times"
).
parent
():
this
.
element
.
find
(
".add-on .icon-remove, .add-on .fa-times"
).
parent
()):
false
;
this
.
hasInput
=
this
.
component
&&
this
.
element
.
find
(
"input"
).
length
;
if
(
this
.
component
&&
this
.
component
.
length
===
0
){
this
.
component
=
false
}
this
.
linkField
=
options
.
linkField
||
this
.
element
.
data
(
"link-field"
)
||
false
;
this
.
linkFormat
=
DPGlobal
.
parseFormat
(
options
.
linkFormat
||
this
.
element
.
data
(
"link-format"
)
||
DPGlobal
.
getDefaultFormat
(
this
.
formatType
,
"link"
),
this
.
formatType
);
this
.
minuteStep
=
options
.
minuteStep
||
this
.
element
.
data
(
"minute-step"
)
||
5
;
this
.
pickerPosition
=
options
.
pickerPosition
||
this
.
element
.
data
(
"picker-position"
)
||
"bottom-right"
;
this
.
showMeridian
=
options
.
showMeridian
||
this
.
element
.
data
(
"show-meridian"
)
||
false
;
this
.
initialDate
=
options
.
initialDate
||
new
Date
();
this
.
zIndex
=
options
.
zIndex
||
this
.
element
.
data
(
"z-index"
)
||
undefined
;
this
.
title
=
typeof
options
.
title
===
"undefined"
?
false
:
options
.
title
;
this
.
timezone
=
options
.
timezone
||
timeZoneAbbreviation
();
this
.
icons
=
{
leftArrow
:
this
.
fontAwesome
?
"fa-arrow-left"
:(
this
.
bootcssVer
===
3
?
"glyphicon-arrow-left"
:
"icon-arrow-left"
),
rightArrow
:
this
.
fontAwesome
?
"fa-arrow-right"
:(
this
.
bootcssVer
===
3
?
"glyphicon-arrow-right"
:
"icon-arrow-right"
)};
this
.
icontype
=
this
.
fontAwesome
?
"fa"
:
"glyphicon"
;
this
.
_attachEvents
();
this
.
clickedOutside
=
function
(
e
){
if
(
$
(
e
.
target
).
closest
(
".datetimepicker"
).
length
===
0
){
that
.
hide
()}};
this
.
formatViewType
=
"datetime"
;
if
(
"formatViewType"
in
options
){
this
.
formatViewType
=
options
.
formatViewType
}
else
{
if
(
"formatViewType"
in
this
.
element
.
data
()){
this
.
formatViewType
=
this
.
element
.
data
(
"formatViewType"
)}}
this
.
minView
=
0
;
if
(
"minView"
in
options
){
this
.
minView
=
options
.
minView
}
else
{
if
(
"minView"
in
this
.
element
.
data
()){
this
.
minView
=
this
.
element
.
data
(
"min-view"
)}}
this
.
minView
=
DPGlobal
.
convertViewMode
(
this
.
minView
);
this
.
maxView
=
DPGlobal
.
modes
.
length
-
1
;
if
(
"maxView"
in
options
){
this
.
maxView
=
options
.
maxView
}
else
{
if
(
"maxView"
in
this
.
element
.
data
()){
this
.
maxView
=
this
.
element
.
data
(
"max-view"
)}}
this
.
maxView
=
DPGlobal
.
convertViewMode
(
this
.
maxView
);
this
.
wheelViewModeNavigation
=
false
;
if
(
"wheelViewModeNavigation"
in
options
){
this
.
wheelViewModeNavigation
=
options
.
wheelViewModeNavigation
}
else
{
if
(
"wheelViewModeNavigation"
in
this
.
element
.
data
()){
this
.
wheelViewModeNavigation
=
this
.
element
.
data
(
"view-mode-wheel-navigation"
)}}
this
.
wheelViewModeNavigationInverseDirection
=
false
;
if
(
"wheelViewModeNavigationInverseDirection"
in
options
){
this
.
wheelViewModeNavigationInverseDirection
=
options
.
wheelViewModeNavigationInverseDirection
}
else
{
if
(
"wheelViewModeNavigationInverseDirection"
in
this
.
element
.
data
()){
this
.
wheelViewModeNavigationInverseDirection
=
this
.
element
.
data
(
"view-mode-wheel-navigation-inverse-dir"
)}}
this
.
wheelViewModeNavigationDelay
=
100
;
if
(
"wheelViewModeNavigationDelay"
in
options
){
this
.
wheelViewModeNavigationDelay
=
options
.
wheelViewModeNavigationDelay
}
else
{
if
(
"wheelViewModeNavigationDelay"
in
this
.
element
.
data
()){
this
.
wheelViewModeNavigationDelay
=
this
.
element
.
data
(
"view-mode-wheel-navigation-delay"
)}}
this
.
startViewMode
=
2
;
if
(
"startView"
in
options
){
this
.
startViewMode
=
options
.
startView
}
else
{
if
(
"startView"
in
this
.
element
.
data
()){
this
.
startViewMode
=
this
.
element
.
data
(
"start-view"
)}}
this
.
startViewMode
=
DPGlobal
.
convertViewMode
(
this
.
startViewMode
);
this
.
viewMode
=
this
.
startViewMode
;
this
.
viewSelect
=
this
.
minView
;
if
(
"viewSelect"
in
options
){
this
.
viewSelect
=
options
.
viewSelect
}
else
{
if
(
"viewSelect"
in
this
.
element
.
data
()){
this
.
viewSelect
=
this
.
element
.
data
(
"view-select"
)}}
this
.
viewSelect
=
DPGlobal
.
convertViewMode
(
this
.
viewSelect
);
this
.
forceParse
=
true
;
if
(
"forceParse"
in
options
){
this
.
forceParse
=
options
.
forceParse
}
else
{
if
(
"dateForceParse"
in
this
.
element
.
data
()){
this
.
forceParse
=
this
.
element
.
data
(
"date-force-parse"
)}}
var
template
=
this
.
bootcssVer
===
3
?
DPGlobal
.
templateV3
:
DPGlobal
.
template
;
while
(
template
.
indexOf
(
"{iconType}"
)
!==-
1
){
template
=
template
.
replace
(
"{iconType}"
,
this
.
icontype
)}
while
(
template
.
indexOf
(
"{leftArrow}"
)
!==-
1
){
template
=
template
.
replace
(
"{leftArrow}"
,
this
.
icons
.
leftArrow
)}
while
(
template
.
indexOf
(
"{rightArrow}"
)
!==-
1
){
template
=
template
.
replace
(
"{rightArrow}"
,
this
.
icons
.
rightArrow
)}
this
.
picker
=
$
(
template
).
appendTo
(
this
.
isInline
?
this
.
element
:
this
.
container
).
on
({
click
:
$
.
proxy
(
this
.
click
,
this
),
mousedown
:
$
.
proxy
(
this
.
mousedown
,
this
)});
if
(
this
.
wheelViewModeNavigation
){
if
(
$
.
fn
.
mousewheel
){
this
.
picker
.
on
({
mousewheel
:
$
.
proxy
(
this
.
mousewheel
,
this
)})}
else
{
console
.
log
(
"Mouse Wheel event is not supported. Please include the jQuery Mouse Wheel plugin before enabling this option"
)}}
if
(
this
.
isInline
){
this
.
picker
.
addClass
(
"datetimepicker-inline"
)}
else
{
this
.
picker
.
addClass
(
"datetimepicker-dropdown-"
+
this
.
pickerPosition
+
" dropdown-menu"
)}
if
(
this
.
isRTL
){
this
.
picker
.
addClass
(
"datetimepicker-rtl"
);
var
selector
=
this
.
bootcssVer
===
3
?
".prev span, .next span"
:
".prev i, .next i"
;
this
.
picker
.
find
(
selector
).
toggleClass
(
this
.
icons
.
leftArrow
+
" "
+
this
.
icons
.
rightArrow
)}
$
(
document
).
on
(
"mousedown touchend"
,
this
.
clickedOutside
);
this
.
autoclose
=
false
;
if
(
"autoclose"
in
options
){
this
.
autoclose
=
options
.
autoclose
}
else
{
if
(
"dateAutoclose"
in
this
.
element
.
data
()){
this
.
autoclose
=
this
.
element
.
data
(
"date-autoclose"
)}}
this
.
keyboardNavigation
=
true
;
if
(
"keyboardNavigation"
in
options
){
this
.
keyboardNavigation
=
options
.
keyboardNavigation
}
else
{
if
(
"dateKeyboardNavigation"
in
this
.
element
.
data
()){
this
.
keyboardNavigation
=
this
.
element
.
data
(
"date-keyboard-navigation"
)}}
this
.
todayBtn
=
(
options
.
todayBtn
||
this
.
element
.
data
(
"date-today-btn"
)
||
false
);
this
.
clearBtn
=
(
options
.
clearBtn
||
this
.
element
.
data
(
"date-clear-btn"
)
||
false
);
this
.
todayHighlight
=
(
options
.
todayHighlight
||
this
.
element
.
data
(
"date-today-highlight"
)
||
false
);
this
.
weekStart
=
0
;
if
(
typeof
options
.
weekStart
!==
"undefined"
){
this
.
weekStart
=
options
.
weekStart
}
else
{
if
(
typeof
this
.
element
.
data
(
"date-weekstart"
)
!==
"undefined"
){
this
.
weekStart
=
this
.
element
.
data
(
"date-weekstart"
)}
else
{
if
(
typeof
dates
[
this
.
language
].
weekStart
!==
"undefined"
){
this
.
weekStart
=
dates
[
this
.
language
].
weekStart
}}}
this
.
weekStart
=
this
.
weekStart
%
7
;
this
.
weekEnd
=
((
this
.
weekStart
+
6
)
%
7
);
this
.
onRenderDay
=
function
(
date
){
var
render
=
(
options
.
onRenderDay
||
function
(){
return
[]})(
date
);
if
(
typeof
render
===
"string"
){
render
=
[
render
]}
var
res
=
[
"day"
];
return
res
.
concat
((
render
?
render
:[]))};
this
.
onRenderHour
=
function
(
date
){
var
render
=
(
options
.
onRenderHour
||
function
(){
return
[]})(
date
);
var
res
=
[
"hour"
];
if
(
typeof
render
===
"string"
){
render
=
[
render
]}
return
res
.
concat
((
render
?
render
:[]))};
this
.
onRenderMinute
=
function
(
date
){
var
render
=
(
options
.
onRenderMinute
||
function
(){
return
[]})(
date
);
var
res
=
[
"minute"
];
if
(
typeof
render
===
"string"
){
render
=
[
render
]}
if
(
date
<
this
.
startDate
||
date
>
this
.
endDate
){
res
.
push
(
"disabled"
)}
else
{
if
(
Math
.
floor
(
this
.
date
.
getUTCMinutes
()
/
this
.
minuteStep
)
===
Math
.
floor
(
date
.
getUTCMinutes
()
/
this
.
minuteStep
)){
res
.
push
(
"active"
)}}
return
res
.
concat
((
render
?
render
:[]))};
this
.
onRenderYear
=
function
(
date
){
var
render
=
(
options
.
onRenderYear
||
function
(){
return
[]})(
date
);
var
res
=
[
"year"
];
if
(
typeof
render
===
"string"
){
render
=
[
render
]}
if
(
this
.
date
.
getUTCFullYear
()
===
date
.
getUTCFullYear
()){
res
.
push
(
"active"
)}
var
currentYear
=
date
.
getUTCFullYear
();
var
endYear
=
this
.
endDate
.
getUTCFullYear
();
if
(
date
<
this
.
startDate
||
currentYear
>
endYear
){
res
.
push
(
"disabled"
)}
return
res
.
concat
((
render
?
render
:[]))};
this
.
onRenderMonth
=
function
(
date
){
var
render
=
(
options
.
onRenderMonth
||
function
(){
return
[]})(
date
);
var
res
=
[
"month"
];
if
(
typeof
render
===
"string"
){
render
=
[
render
]}
return
res
.
concat
((
render
?
render
:[]))};
this
.
startDate
=
new
Date
(
-
8639968443048000
);
this
.
endDate
=
new
Date
(
8639968443048000
);
this
.
datesDisabled
=
[];
this
.
daysOfWeekDisabled
=
[];
this
.
setStartDate
(
options
.
startDate
||
this
.
element
.
data
(
"date-startdate"
));
this
.
setEndDate
(
options
.
endDate
||
this
.
element
.
data
(
"date-enddate"
));
this
.
setDatesDisabled
(
options
.
datesDisabled
||
this
.
element
.
data
(
"date-dates-disabled"
));
this
.
setDaysOfWeekDisabled
(
options
.
daysOfWeekDisabled
||
this
.
element
.
data
(
"date-days-of-week-disabled"
));
this
.
setMinutesDisabled
(
options
.
minutesDisabled
||
this
.
element
.
data
(
"date-minute-disabled"
));
this
.
setHoursDisabled
(
options
.
hoursDisabled
||
this
.
element
.
data
(
"date-hour-disabled"
));
this
.
fillDow
();
this
.
fillMonths
();
this
.
update
();
this
.
showMode
();
if
(
this
.
isInline
){
this
.
show
()}};
Datetimepicker
.
prototype
=
{
constructor
:
Datetimepicker
,
_events
:[],
_attachEvents
:
function
(){
this
.
_detachEvents
();
if
(
this
.
isInput
){
this
.
_events
=
[[
this
.
element
,{
focus
:
$
.
proxy
(
this
.
show
,
this
),
keyup
:
$
.
proxy
(
this
.
update
,
this
),
keydown
:
$
.
proxy
(
this
.
keydown
,
this
)}]]}
else
{
if
(
this
.
component
&&
this
.
hasInput
){
this
.
_events
=
[[
this
.
element
.
find
(
"input"
),{
focus
:
$
.
proxy
(
this
.
show
,
this
),
keyup
:
$
.
proxy
(
this
.
update
,
this
),
keydown
:
$
.
proxy
(
this
.
keydown
,
this
)}],[
this
.
component
,{
click
:
$
.
proxy
(
this
.
show
,
this
)}]];
if
(
this
.
componentReset
){
this
.
_events
.
push
([
this
.
componentReset
,{
click
:
$
.
proxy
(
this
.
reset
,
this
)}])}}
else
{
if
(
this
.
element
.
is
(
"div"
)){
this
.
isInline
=
true
}
else
{
this
.
_events
=
[[
this
.
element
,{
click
:
$
.
proxy
(
this
.
show
,
this
)}]]}}}
for
(
var
i
=
0
,
el
,
ev
;
i
<
this
.
_events
.
length
;
i
++
){
el
=
this
.
_events
[
i
][
0
];
ev
=
this
.
_events
[
i
][
1
];
el
.
on
(
ev
)}},
_detachEvents
:
function
(){
for
(
var
i
=
0
,
el
,
ev
;
i
<
this
.
_events
.
length
;
i
++
){
el
=
this
.
_events
[
i
][
0
];
ev
=
this
.
_events
[
i
][
1
];
el
.
off
(
ev
)}
this
.
_events
=
[]},
show
:
function
(
e
){
this
.
picker
.
show
();
this
.
height
=
this
.
component
?
this
.
component
.
outerHeight
():
this
.
element
.
outerHeight
();
if
(
this
.
forceParse
){
this
.
update
()}
this
.
place
();
$
(
window
).
on
(
"resize"
,
$
.
proxy
(
this
.
place
,
this
));
if
(
e
){
e
.
stopPropagation
();
e
.
preventDefault
()}
this
.
isVisible
=
true
;
this
.
element
.
trigger
({
type
:
"show"
,
date
:
this
.
date
})},
hide
:
function
(){
if
(
!
this
.
isVisible
){
return
}
if
(
this
.
isInline
){
return
}
this
.
picker
.
hide
();
$
(
window
).
off
(
"resize"
,
this
.
place
);
this
.
viewMode
=
this
.
startViewMode
;
this
.
showMode
();
if
(
!
this
.
isInput
){
$
(
document
).
off
(
"mousedown"
,
this
.
hide
)}
if
(
this
.
forceParse
&&
(
this
.
isInput
&&
this
.
element
.
val
()
||
this
.
hasInput
&&
this
.
element
.
find
(
"input"
).
val
())){
this
.
setValue
()}
this
.
isVisible
=
false
;
this
.
element
.
trigger
({
type
:
"hide"
,
date
:
this
.
date
})},
remove
:
function
(){
this
.
_detachEvents
();
$
(
document
).
off
(
"mousedown"
,
this
.
clickedOutside
);
this
.
picker
.
remove
();
delete
this
.
picker
;
delete
this
.
element
.
data
().
datetimepicker
},
getDate
:
function
(){
var
d
=
this
.
getUTCDate
();
if
(
d
===
null
){
return
null
}
return
new
Date
(
d
.
getTime
()
+
(
d
.
getTimezoneOffset
()
*
60000
))},
getUTCDate
:
function
(){
return
this
.
date
},
getInitialDate
:
function
(){
return
this
.
initialDate
},
setInitialDate
:
function
(
initialDate
){
this
.
initialDate
=
initialDate
},
setDate
:
function
(
d
){
this
.
setUTCDate
(
new
Date
(
d
.
getTime
()
-
(
d
.
getTimezoneOffset
()
*
60000
)))},
setUTCDate
:
function
(
d
){
if
(
d
>=
this
.
startDate
&&
d
<=
this
.
endDate
){
this
.
date
=
d
;
this
.
setValue
();
this
.
viewDate
=
this
.
date
;
this
.
fill
()}
else
{
this
.
element
.
trigger
({
type
:
"outOfRange"
,
date
:
d
,
startDate
:
this
.
startDate
,
endDate
:
this
.
endDate
})}},
setFormat
:
function
(
format
){
this
.
format
=
DPGlobal
.
parseFormat
(
format
,
this
.
formatType
);
var
element
;
if
(
this
.
isInput
){
element
=
this
.
element
}
else
{
if
(
this
.
component
){
element
=
this
.
element
.
find
(
"input"
)}}
if
(
element
&&
element
.
val
()){
this
.
setValue
()}},
setValue
:
function
(){
var
formatted
=
this
.
getFormattedDate
();
if
(
!
this
.
isInput
){
if
(
this
.
component
){
this
.
element
.
find
(
"input"
).
val
(
formatted
)}
this
.
element
.
data
(
"date"
,
formatted
)}
else
{
this
.
element
.
val
(
formatted
)}
if
(
this
.
linkField
){
$
(
"#"
+
this
.
linkField
).
val
(
this
.
getFormattedDate
(
this
.
linkFormat
))}},
getFormattedDate
:
function
(
format
){
format
=
format
||
this
.
format
;
return
DPGlobal
.
formatDate
(
this
.
date
,
format
,
this
.
language
,
this
.
formatType
,
this
.
timezone
)},
setStartDate
:
function
(
startDate
){
this
.
startDate
=
startDate
||
this
.
startDate
;
if
(
this
.
startDate
.
valueOf
()
!==
8639968443048000
){
this
.
startDate
=
DPGlobal
.
parseDate
(
this
.
startDate
,
this
.
format
,
this
.
language
,
this
.
formatType
,
this
.
timezone
)}
this
.
update
();
this
.
updateNavArrows
()},
setEndDate
:
function
(
endDate
){
this
.
endDate
=
endDate
||
this
.
endDate
;
if
(
this
.
endDate
.
valueOf
()
!==
8639968443048000
){
this
.
endDate
=
DPGlobal
.
parseDate
(
this
.
endDate
,
this
.
format
,
this
.
language
,
this
.
formatType
,
this
.
timezone
)}
this
.
update
();
this
.
updateNavArrows
()},
setDatesDisabled
:
function
(
datesDisabled
){
this
.
datesDisabled
=
datesDisabled
||
[];
if
(
!
$
.
isArray
(
this
.
datesDisabled
)){
this
.
datesDisabled
=
this
.
datesDisabled
.
split
(
/,
\s
*/
)}
var
mThis
=
this
;
this
.
datesDisabled
=
$
.
map
(
this
.
datesDisabled
,
function
(
d
){
return
DPGlobal
.
parseDate
(
d
,
mThis
.
format
,
mThis
.
language
,
mThis
.
formatType
,
mThis
.
timezone
).
toDateString
()});
this
.
update
();
this
.
updateNavArrows
()},
setTitle
:
function
(
selector
,
value
){
return
this
.
picker
.
find
(
selector
).
find
(
"th:eq(1)"
).
text
(
this
.
title
===
false
?
value
:
this
.
title
)},
setDaysOfWeekDisabled
:
function
(
daysOfWeekDisabled
){
this
.
daysOfWeekDisabled
=
daysOfWeekDisabled
||
[];
if
(
!
$
.
isArray
(
this
.
daysOfWeekDisabled
)){
this
.
daysOfWeekDisabled
=
this
.
daysOfWeekDisabled
.
split
(
/,
\s
*/
)}
this
.
daysOfWeekDisabled
=
$
.
map
(
this
.
daysOfWeekDisabled
,
function
(
d
){
return
parseInt
(
d
,
10
)});
this
.
update
();
this
.
updateNavArrows
()},
setMinutesDisabled
:
function
(
minutesDisabled
){
this
.
minutesDisabled
=
minutesDisabled
||
[];
if
(
!
$
.
isArray
(
this
.
minutesDisabled
)){
this
.
minutesDisabled
=
this
.
minutesDisabled
.
split
(
/,
\s
*/
)}
this
.
minutesDisabled
=
$
.
map
(
this
.
minutesDisabled
,
function
(
d
){
return
parseInt
(
d
,
10
)});
this
.
update
();
this
.
updateNavArrows
()},
setHoursDisabled
:
function
(
hoursDisabled
){
this
.
hoursDisabled
=
hoursDisabled
||
[];
if
(
!
$
.
isArray
(
this
.
hoursDisabled
)){
this
.
hoursDisabled
=
this
.
hoursDisabled
.
split
(
/,
\s
*/
)}
this
.
hoursDisabled
=
$
.
map
(
this
.
hoursDisabled
,
function
(
d
){
return
parseInt
(
d
,
10
)});
this
.
update
();
this
.
updateNavArrows
()},
place
:
function
(){
if
(
this
.
isInline
){
return
}
if
(
!
this
.
zIndex
){
var
index_highest
=
0
;
$
(
"div"
).
each
(
function
(){
var
index_current
=
parseInt
(
$
(
this
).
css
(
"zIndex"
),
10
);
if
(
index_current
>
index_highest
){
index_highest
=
index_current
}});
this
.
zIndex
=
index_highest
+
10
}
var
offset
,
top
,
left
,
containerOffset
;
if
(
this
.
container
instanceof
$
){
containerOffset
=
this
.
container
.
offset
()}
else
{
containerOffset
=
$
(
this
.
container
).
offset
()}
if
(
this
.
component
){
offset
=
this
.
component
.
offset
();
left
=
offset
.
left
;
if
(
this
.
pickerPosition
===
"bottom-left"
||
this
.
pickerPosition
===
"top-left"
){
left
+=
this
.
component
.
outerWidth
()
-
this
.
picker
.
outerWidth
()}}
else
{
offset
=
this
.
element
.
offset
();
left
=
offset
.
left
;
if
(
this
.
pickerPosition
===
"bottom-left"
||
this
.
pickerPosition
===
"top-left"
){
left
+=
this
.
element
.
outerWidth
()
-
this
.
picker
.
outerWidth
()}}
var
bodyWidth
=
document
.
body
.
clientWidth
||
window
.
innerWidth
;
if
(
left
+
220
>
bodyWidth
){
left
=
bodyWidth
-
220
}
if
(
this
.
pickerPosition
===
"top-left"
||
this
.
pickerPosition
===
"top-right"
){
top
=
offset
.
top
-
this
.
picker
.
outerHeight
()}
else
{
top
=
offset
.
top
+
this
.
height
}
top
=
top
-
containerOffset
.
top
;
left
=
left
-
containerOffset
.
left
;
this
.
picker
.
css
({
top
:
top
,
left
:
left
,
zIndex
:
this
.
zIndex
})},
hour_minute
:
"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]"
,
update
:
function
(){
var
date
,
fromArgs
=
false
;
if
(
arguments
&&
arguments
.
length
&&
(
typeof
arguments
[
0
]
===
"string"
||
arguments
[
0
]
instanceof
Date
)){
date
=
arguments
[
0
];
fromArgs
=
true
}
else
{
date
=
(
this
.
isInput
?
this
.
element
.
val
():
this
.
element
.
find
(
"input"
).
val
())
||
this
.
element
.
data
(
"date"
)
||
this
.
initialDate
;
if
(
typeof
date
===
"string"
){
date
=
date
.
replace
(
/^
\s
+|
\s
+$/g
,
""
)}}
if
(
!
date
){
date
=
new
Date
();
fromArgs
=
false
}
if
(
typeof
date
===
"string"
){
if
(
new
RegExp
(
this
.
hour_minute
).
test
(
date
)
||
new
RegExp
(
this
.
hour_minute
+
":[0-5][0-9]"
).
test
(
date
)){
date
=
this
.
getDate
()}}
this
.
date
=
DPGlobal
.
parseDate
(
date
,
this
.
format
,
this
.
language
,
this
.
formatType
,
this
.
timezone
);
if
(
fromArgs
){
this
.
setValue
()}
if
(
this
.
date
<
this
.
startDate
){
this
.
viewDate
=
new
Date
(
this
.
startDate
)}
else
{
if
(
this
.
date
>
this
.
endDate
){
this
.
viewDate
=
new
Date
(
this
.
endDate
)}
else
{
this
.
viewDate
=
new
Date
(
this
.
date
)}}
this
.
fill
()},
fillDow
:
function
(){
var
dowCnt
=
this
.
weekStart
,
html
=
"<tr>"
;
while
(
dowCnt
<
this
.
weekStart
+
7
){
html
+=
'<th class="dow">'
+
dates
[
this
.
language
].
daysMin
[(
dowCnt
++
)
%
7
]
+
"</th>"
}
html
+=
"</tr>"
;
this
.
picker
.
find
(
".datetimepicker-days thead"
).
append
(
html
)},
fillMonths
:
function
(){
var
html
=
""
;
var
d
=
new
Date
(
this
.
viewDate
);
for
(
var
i
=
0
;
i
<
12
;
i
++
){
d
.
setUTCMonth
(
i
);
var
classes
=
this
.
onRenderMonth
(
d
);
html
+=
'<span class="'
+
classes
.
join
(
" "
)
+
'">'
+
dates
[
this
.
language
].
monthsShort
[
i
]
+
"</span>"
}
this
.
picker
.
find
(
".datetimepicker-months td"
).
html
(
html
)},
fill
:
function
(){
if
(
!
this
.
date
||!
this
.
viewDate
){
return
}
var
d
=
new
Date
(
this
.
viewDate
),
year
=
d
.
getUTCFullYear
(),
month
=
d
.
getUTCMonth
(),
dayMonth
=
d
.
getUTCDate
(),
hours
=
d
.
getUTCHours
(),
startYear
=
this
.
startDate
.
getUTCFullYear
(),
startMonth
=
this
.
startDate
.
getUTCMonth
(),
endYear
=
this
.
endDate
.
getUTCFullYear
(),
endMonth
=
this
.
endDate
.
getUTCMonth
()
+
1
,
currentDate
=
(
new
UTCDate
(
this
.
date
.
getUTCFullYear
(),
this
.
date
.
getUTCMonth
(),
this
.
date
.
getUTCDate
())).
valueOf
(),
today
=
new
Date
();
this
.
setTitle
(
".datetimepicker-days"
,
dates
[
this
.
language
].
months
[
month
]
+
" "
+
year
);
if
(
this
.
formatViewType
===
"time"
){
var
formatted
=
this
.
getFormattedDate
();
this
.
setTitle
(
".datetimepicker-hours"
,
formatted
);
this
.
setTitle
(
".datetimepicker-minutes"
,
formatted
)}
else
{
this
.
setTitle
(
".datetimepicker-hours"
,
dayMonth
+
" "
+
dates
[
this
.
language
].
months
[
month
]
+
" "
+
year
);
this
.
setTitle
(
".datetimepicker-minutes"
,
dayMonth
+
" "
+
dates
[
this
.
language
].
months
[
month
]
+
" "
+
year
)}
this
.
picker
.
find
(
"tfoot th.today"
).
text
(
dates
[
this
.
language
].
today
||
dates
[
"en"
].
today
).
toggle
(
this
.
todayBtn
!==
false
);
this
.
picker
.
find
(
"tfoot th.clear"
).
text
(
dates
[
this
.
language
].
clear
||
dates
[
"en"
].
clear
).
toggle
(
this
.
clearBtn
!==
false
);
this
.
updateNavArrows
();
this
.
fillMonths
();
var
prevMonth
=
UTCDate
(
year
,
month
-
1
,
28
,
0
,
0
,
0
,
0
),
day
=
DPGlobal
.
getDaysInMonth
(
prevMonth
.
getUTCFullYear
(),
prevMonth
.
getUTCMonth
());
prevMonth
.
setUTCDate
(
day
);
prevMonth
.
setUTCDate
(
day
-
(
prevMonth
.
getUTCDay
()
-
this
.
weekStart
+
7
)
%
7
);
var
nextMonth
=
new
Date
(
prevMonth
);
nextMonth
.
setUTCDate
(
nextMonth
.
getUTCDate
()
+
42
);
nextMonth
=
nextMonth
.
valueOf
();
var
html
=
[];
var
classes
;
while
(
prevMonth
.
valueOf
()
<
nextMonth
){
if
(
prevMonth
.
getUTCDay
()
===
this
.
weekStart
){
html
.
push
(
"<tr>"
)}
classes
=
this
.
onRenderDay
(
prevMonth
);
if
(
prevMonth
.
getUTCFullYear
()
<
year
||
(
prevMonth
.
getUTCFullYear
()
===
year
&&
prevMonth
.
getUTCMonth
()
<
month
)){
classes
.
push
(
"old"
)}
else
{
if
(
prevMonth
.
getUTCFullYear
()
>
year
||
(
prevMonth
.
getUTCFullYear
()
===
year
&&
prevMonth
.
getUTCMonth
()
>
month
)){
classes
.
push
(
"new"
)}}
if
(
this
.
todayHighlight
&&
prevMonth
.
getUTCFullYear
()
===
today
.
getFullYear
()
&&
prevMonth
.
getUTCMonth
()
===
today
.
getMonth
()
&&
prevMonth
.
getUTCDate
()
===
today
.
getDate
()){
classes
.
push
(
"today"
)}
if
(
prevMonth
.
valueOf
()
===
currentDate
){
classes
.
push
(
"active"
)}
if
((
prevMonth
.
valueOf
()
+
86400000
)
<=
this
.
startDate
||
prevMonth
.
valueOf
()
>
this
.
endDate
||
$
.
inArray
(
prevMonth
.
getUTCDay
(),
this
.
daysOfWeekDisabled
)
!==-
1
||
$
.
inArray
(
prevMonth
.
toDateString
(),
this
.
datesDisabled
)
!==-
1
){
classes
.
push
(
"disabled"
)}
html
.
push
(
'<td class="'
+
classes
.
join
(
" "
)
+
'">'
+
prevMonth
.
getUTCDate
()
+
"</td>"
);
if
(
prevMonth
.
getUTCDay
()
===
this
.
weekEnd
){
html
.
push
(
"</tr>"
)}
prevMonth
.
setUTCDate
(
prevMonth
.
getUTCDate
()
+
1
)}
this
.
picker
.
find
(
".datetimepicker-days tbody"
).
empty
().
append
(
html
.
join
(
""
));
html
=
[];
var
txt
=
""
,
meridian
=
""
,
meridianOld
=
""
;
var
hoursDisabled
=
this
.
hoursDisabled
||
[];
d
=
new
Date
(
this
.
viewDate
);
for
(
var
i
=
0
;
i
<
24
;
i
++
){
d
.
setUTCHours
(
i
);
classes
=
this
.
onRenderHour
(
d
);
if
(
hoursDisabled
.
indexOf
(
i
)
!==-
1
){
classes
.
push
(
"disabled"
)}
var
actual
=
UTCDate
(
year
,
month
,
dayMonth
,
i
);
if
((
actual
.
valueOf
()
+
3600000
)
<=
this
.
startDate
||
actual
.
valueOf
()
>
this
.
endDate
){
classes
.
push
(
"disabled"
)}
else
{
if
(
hours
===
i
){
classes
.
push
(
"active"
)}}
if
(
this
.
showMeridian
&&
dates
[
this
.
language
].
meridiem
.
length
===
2
){
meridian
=
(
i
<
12
?
dates
[
this
.
language
].
meridiem
[
0
]:
dates
[
this
.
language
].
meridiem
[
1
]);
if
(
meridian
!==
meridianOld
){
if
(
meridianOld
!==
""
){
html
.
push
(
"</fieldset>"
)}
html
.
push
(
'<fieldset class="hour"><legend>'
+
meridian
.
toUpperCase
()
+
"</legend>"
)}
meridianOld
=
meridian
;
txt
=
(
i
%
12
?
i
%
12
:
12
);
if
(
i
<
12
){
classes
.
push
(
"hour_am"
)}
else
{
classes
.
push
(
"hour_pm"
)}
html
.
push
(
'<span class="'
+
classes
.
join
(
" "
)
+
'">'
+
txt
+
"</span>"
);
if
(
i
===
23
){
html
.
push
(
"</fieldset>"
)}}
else
{
txt
=
i
+
":00"
;
html
.
push
(
'<span class="'
+
classes
.
join
(
" "
)
+
'">'
+
txt
+
"</span>"
)}}
this
.
picker
.
find
(
".datetimepicker-hours td"
).
html
(
html
.
join
(
""
));
html
=
[];
txt
=
""
;
meridian
=
""
;
meridianOld
=
""
;
var
minutesDisabled
=
this
.
minutesDisabled
||
[];
d
=
new
Date
(
this
.
viewDate
);
for
(
var
i
=
0
;
i
<
60
;
i
+=
this
.
minuteStep
){
if
(
minutesDisabled
.
indexOf
(
i
)
!==-
1
){
continue
}
d
.
setUTCMinutes
(
i
);
d
.
setUTCSeconds
(
0
);
classes
=
this
.
onRenderMinute
(
d
);
if
(
this
.
showMeridian
&&
dates
[
this
.
language
].
meridiem
.
length
===
2
){
meridian
=
(
hours
<
12
?
dates
[
this
.
language
].
meridiem
[
0
]:
dates
[
this
.
language
].
meridiem
[
1
]);
if
(
meridian
!==
meridianOld
){
if
(
meridianOld
!==
""
){
html
.
push
(
"</fieldset>"
)}
html
.
push
(
'<fieldset class="minute"><legend>'
+
meridian
.
toUpperCase
()
+
"</legend>"
)}
meridianOld
=
meridian
;
txt
=
(
hours
%
12
?
hours
%
12
:
12
);
html
.
push
(
'<span class="'
+
classes
.
join
(
" "
)
+
'">'
+
txt
+
":"
+
(
i
<
10
?
"0"
+
i
:
i
)
+
"</span>"
);
if
(
i
===
59
){
html
.
push
(
"</fieldset>"
)}}
else
{
txt
=
i
+
":00"
;
html
.
push
(
'<span class="'
+
classes
.
join
(
" "
)
+
'">'
+
hours
+
":"
+
(
i
<
10
?
"0"
+
i
:
i
)
+
"</span>"
)}}
this
.
picker
.
find
(
".datetimepicker-minutes td"
).
html
(
html
.
join
(
""
));
var
currentYear
=
this
.
date
.
getUTCFullYear
();
var
months
=
this
.
setTitle
(
".datetimepicker-months"
,
year
).
end
().
find
(
".month"
).
removeClass
(
"active"
);
if
(
currentYear
===
year
){
months
.
eq
(
this
.
date
.
getUTCMonth
()).
addClass
(
"active"
)}
if
(
year
<
startYear
||
year
>
endYear
){
months
.
addClass
(
"disabled"
)}
if
(
year
===
startYear
){
months
.
slice
(
0
,
startMonth
).
addClass
(
"disabled"
)}
if
(
year
===
endYear
){
months
.
slice
(
endMonth
).
addClass
(
"disabled"
)}
html
=
""
;
year
=
parseInt
(
year
/
10
,
10
)
*
10
;
var
yearCont
=
this
.
setTitle
(
".datetimepicker-years"
,
year
+
"-"
+
(
year
+
9
)).
end
().
find
(
"td"
);
year
-=
1
;
d
=
new
Date
(
this
.
viewDate
);
for
(
var
i
=-
1
;
i
<
11
;
i
++
){
d
.
setUTCFullYear
(
year
);
classes
=
this
.
onRenderYear
(
d
);
if
(
i
===-
1
||
i
===
10
){
classes
.
push
(
old
)}
html
+=
'<span class="'
+
classes
.
join
(
" "
)
+
'">'
+
year
+
"</span>"
;
year
+=
1
}
yearCont
.
html
(
html
);
this
.
place
()},
updateNavArrows
:
function
(){
var
d
=
new
Date
(
this
.
viewDate
),
year
=
d
.
getUTCFullYear
(),
month
=
d
.
getUTCMonth
(),
day
=
d
.
getUTCDate
(),
hour
=
d
.
getUTCHours
();
switch
(
this
.
viewMode
){
case
0
:
if
(
year
<=
this
.
startDate
.
getUTCFullYear
()
&&
month
<=
this
.
startDate
.
getUTCMonth
()
&&
day
<=
this
.
startDate
.
getUTCDate
()
&&
hour
<=
this
.
startDate
.
getUTCHours
()){
this
.
picker
.
find
(
".prev"
).
css
({
visibility
:
"hidden"
})}
else
{
this
.
picker
.
find
(
".prev"
).
css
({
visibility
:
"visible"
})}
if
(
year
>=
this
.
endDate
.
getUTCFullYear
()
&&
month
>=
this
.
endDate
.
getUTCMonth
()
&&
day
>=
this
.
endDate
.
getUTCDate
()
&&
hour
>=
this
.
endDate
.
getUTCHours
()){
this
.
picker
.
find
(
".next"
).
css
({
visibility
:
"hidden"
})}
else
{
this
.
picker
.
find
(
".next"
).
css
({
visibility
:
"visible"
})}
break
;
case
1
:
if
(
year
<=
this
.
startDate
.
getUTCFullYear
()
&&
month
<=
this
.
startDate
.
getUTCMonth
()
&&
day
<=
this
.
startDate
.
getUTCDate
()){
this
.
picker
.
find
(
".prev"
).
css
({
visibility
:
"hidden"
})}
else
{
this
.
picker
.
find
(
".prev"
).
css
({
visibility
:
"visible"
})}
if
(
year
>=
this
.
endDate
.
getUTCFullYear
()
&&
month
>=
this
.
endDate
.
getUTCMonth
()
&&
day
>=
this
.
endDate
.
getUTCDate
()){
this
.
picker
.
find
(
".next"
).
css
({
visibility
:
"hidden"
})}
else
{
this
.
picker
.
find
(
".next"
).
css
({
visibility
:
"visible"
})}
break
;
case
2
:
if
(
year
<=
this
.
startDate
.
getUTCFullYear
()
&&
month
<=
this
.
startDate
.
getUTCMonth
()){
this
.
picker
.
find
(
".prev"
).
css
({
visibility
:
"hidden"
})}
else
{
this
.
picker
.
find
(
".prev"
).
css
({
visibility
:
"visible"
})}
if
(
year
>=
this
.
endDate
.
getUTCFullYear
()
&&
month
>=
this
.
endDate
.
getUTCMonth
()){
this
.
picker
.
find
(
".next"
).
css
({
visibility
:
"hidden"
})}
else
{
this
.
picker
.
find
(
".next"
).
css
({
visibility
:
"visible"
})}
break
;
case
3
:
case
4
:
if
(
year
<=
this
.
startDate
.
getUTCFullYear
()){
this
.
picker
.
find
(
".prev"
).
css
({
visibility
:
"hidden"
})}
else
{
this
.
picker
.
find
(
".prev"
).
css
({
visibility
:
"visible"
})}
if
(
year
>=
this
.
endDate
.
getUTCFullYear
()){
this
.
picker
.
find
(
".next"
).
css
({
visibility
:
"hidden"
})}
else
{
this
.
picker
.
find
(
".next"
).
css
({
visibility
:
"visible"
})}
break
}},
mousewheel
:
function
(
e
){
e
.
preventDefault
();
e
.
stopPropagation
();
if
(
this
.
wheelPause
){
return
}
this
.
wheelPause
=
true
;
var
originalEvent
=
e
.
originalEvent
;
var
delta
=
originalEvent
.
wheelDelta
;
var
mode
=
delta
>
0
?
1
:(
delta
===
0
)?
0
:
-
1
;
if
(
this
.
wheelViewModeNavigationInverseDirection
){
mode
=-
mode
}
this
.
showMode
(
mode
);
setTimeout
(
$
.
proxy
(
function
(){
this
.
wheelPause
=
false
},
this
),
this
.
wheelViewModeNavigationDelay
)},
click
:
function
(
e
){
e
.
stopPropagation
();
e
.
preventDefault
();
var
target
=
$
(
e
.
target
).
closest
(
"span, td, th, legend"
);
if
(
target
.
is
(
"."
+
this
.
icontype
)){
target
=
$
(
target
).
parent
().
closest
(
"span, td, th, legend"
)}
if
(
target
.
length
===
1
){
if
(
target
.
is
(
".disabled"
)){
this
.
element
.
trigger
({
type
:
"outOfRange"
,
date
:
this
.
viewDate
,
startDate
:
this
.
startDate
,
endDate
:
this
.
endDate
});
return
}
switch
(
target
[
0
].
nodeName
.
toLowerCase
()){
case
"th"
:
switch
(
target
[
0
].
className
){
case
"switch"
:
this
.
showMode
(
1
);
break
;
case
"prev"
:
case
"next"
:
var
dir
=
DPGlobal
.
modes
[
this
.
viewMode
].
navStep
*
(
target
[
0
].
className
===
"prev"
?
-
1
:
1
);
switch
(
this
.
viewMode
){
case
0
:
this
.
viewDate
=
this
.
moveHour
(
this
.
viewDate
,
dir
);
break
;
case
1
:
this
.
viewDate
=
this
.
moveDate
(
this
.
viewDate
,
dir
);
break
;
case
2
:
this
.
viewDate
=
this
.
moveMonth
(
this
.
viewDate
,
dir
);
break
;
case
3
:
case
4
:
this
.
viewDate
=
this
.
moveYear
(
this
.
viewDate
,
dir
);
break
}
this
.
fill
();
this
.
element
.
trigger
({
type
:
target
[
0
].
className
+
":"
+
this
.
convertViewModeText
(
this
.
viewMode
),
date
:
this
.
viewDate
,
startDate
:
this
.
startDate
,
endDate
:
this
.
endDate
});
break
;
case
"clear"
:
this
.
reset
();
if
(
this
.
autoclose
){
this
.
hide
()}
break
;
case
"today"
:
var
date
=
new
Date
();
date
=
UTCDate
(
date
.
getFullYear
(),
date
.
getMonth
(),
date
.
getDate
(),
date
.
getHours
(),
date
.
getMinutes
(),
date
.
getSeconds
(),
0
);
if
(
date
<
this
.
startDate
){
date
=
this
.
startDate
}
else
{
if
(
date
>
this
.
endDate
){
date
=
this
.
endDate
}}
this
.
viewMode
=
this
.
startViewMode
;
this
.
showMode
(
0
);
this
.
_setDate
(
date
);
this
.
fill
();
if
(
this
.
autoclose
){
this
.
hide
()}
break
}
break
;
case
"span"
:
if
(
!
target
.
is
(
".disabled"
)){
var
year
=
this
.
viewDate
.
getUTCFullYear
(),
month
=
this
.
viewDate
.
getUTCMonth
(),
day
=
this
.
viewDate
.
getUTCDate
(),
hours
=
this
.
viewDate
.
getUTCHours
(),
minutes
=
this
.
viewDate
.
getUTCMinutes
(),
seconds
=
this
.
viewDate
.
getUTCSeconds
();
if
(
target
.
is
(
".month"
)){
this
.
viewDate
.
setUTCDate
(
1
);
month
=
target
.
parent
().
find
(
"span"
).
index
(
target
);
day
=
this
.
viewDate
.
getUTCDate
();
this
.
viewDate
.
setUTCMonth
(
month
);
this
.
element
.
trigger
({
type
:
"changeMonth"
,
date
:
this
.
viewDate
});
if
(
this
.
viewSelect
>=
3
){
this
.
_setDate
(
UTCDate
(
year
,
month
,
day
,
hours
,
minutes
,
seconds
,
0
))}}
else
{
if
(
target
.
is
(
".year"
)){
this
.
viewDate
.
setUTCDate
(
1
);
year
=
parseInt
(
target
.
text
(),
10
)
||
0
;
this
.
viewDate
.
setUTCFullYear
(
year
);
this
.
element
.
trigger
({
type
:
"changeYear"
,
date
:
this
.
viewDate
});
if
(
this
.
viewSelect
>=
4
){
this
.
_setDate
(
UTCDate
(
year
,
month
,
day
,
hours
,
minutes
,
seconds
,
0
))}}
else
{
if
(
target
.
is
(
".hour"
)){
hours
=
parseInt
(
target
.
text
(),
10
)
||
0
;
if
(
target
.
hasClass
(
"hour_am"
)
||
target
.
hasClass
(
"hour_pm"
)){
if
(
hours
===
12
&&
target
.
hasClass
(
"hour_am"
)){
hours
=
0
}
else
{
if
(
hours
!==
12
&&
target
.
hasClass
(
"hour_pm"
)){
hours
+=
12
}}}
this
.
viewDate
.
setUTCHours
(
hours
);
this
.
element
.
trigger
({
type
:
"changeHour"
,
date
:
this
.
viewDate
});
if
(
this
.
viewSelect
>=
1
){
this
.
_setDate
(
UTCDate
(
year
,
month
,
day
,
hours
,
minutes
,
seconds
,
0
))}}
else
{
if
(
target
.
is
(
".minute"
)){
minutes
=
parseInt
(
target
.
text
().
substr
(
target
.
text
().
indexOf
(
":"
)
+
1
),
10
)
||
0
;
this
.
viewDate
.
setUTCMinutes
(
minutes
);
this
.
element
.
trigger
({
type
:
"changeMinute"
,
date
:
this
.
viewDate
});
if
(
this
.
viewSelect
>=
0
){
this
.
_setDate
(
UTCDate
(
year
,
month
,
day
,
hours
,
minutes
,
seconds
,
0
))}}}}}
if
(
this
.
viewMode
!==
0
){
var
oldViewMode
=
this
.
viewMode
;
this
.
showMode
(
-
1
);
this
.
fill
();
if
(
oldViewMode
===
this
.
viewMode
&&
this
.
autoclose
){
this
.
hide
()}}
else
{
this
.
fill
();
if
(
this
.
autoclose
){
this
.
hide
()}}}
break
;
case
"td"
:
if
(
target
.
is
(
".day"
)
&&!
target
.
is
(
".disabled"
)){
var
day
=
parseInt
(
target
.
text
(),
10
)
||
1
;
var
year
=
this
.
viewDate
.
getUTCFullYear
(),
month
=
this
.
viewDate
.
getUTCMonth
(),
hours
=
this
.
viewDate
.
getUTCHours
(),
minutes
=
this
.
viewDate
.
getUTCMinutes
(),
seconds
=
this
.
viewDate
.
getUTCSeconds
();
if
(
target
.
is
(
".old"
)){
if
(
month
===
0
){
month
=
11
;
year
-=
1
}
else
{
month
-=
1
}}
else
{
if
(
target
.
is
(
".new"
)){
if
(
month
===
11
){
month
=
0
;
year
+=
1
}
else
{
month
+=
1
}}}
this
.
viewDate
.
setUTCFullYear
(
year
);
this
.
viewDate
.
setUTCMonth
(
month
,
day
);
this
.
element
.
trigger
({
type
:
"changeDay"
,
date
:
this
.
viewDate
});
if
(
this
.
viewSelect
>=
2
){
this
.
_setDate
(
UTCDate
(
year
,
month
,
day
,
hours
,
minutes
,
seconds
,
0
))}}
var
oldViewMode
=
this
.
viewMode
;
this
.
showMode
(
-
1
);
this
.
fill
();
if
(
oldViewMode
===
this
.
viewMode
&&
this
.
autoclose
){
this
.
hide
()}
break
}}},
_setDate
:
function
(
date
,
which
){
if
(
!
which
||
which
===
"date"
){
this
.
date
=
date
}
if
(
!
which
||
which
===
"view"
){
this
.
viewDate
=
date
}
this
.
fill
();
this
.
setValue
();
var
element
;
if
(
this
.
isInput
){
element
=
this
.
element
}
else
{
if
(
this
.
component
){
element
=
this
.
element
.
find
(
"input"
)}}
if
(
element
){
element
.
change
()}
this
.
element
.
trigger
({
type
:
"changeDate"
,
date
:
this
.
getDate
()});
if
(
date
===
null
){
this
.
date
=
this
.
viewDate
}},
moveMinute
:
function
(
date
,
dir
){
if
(
!
dir
){
return
date
}
var
new_date
=
new
Date
(
date
.
valueOf
());
new_date
.
setUTCMinutes
(
new_date
.
getUTCMinutes
()
+
(
dir
*
this
.
minuteStep
));
return
new_date
},
moveHour
:
function
(
date
,
dir
){
if
(
!
dir
){
return
date
}
var
new_date
=
new
Date
(
date
.
valueOf
());
new_date
.
setUTCHours
(
new_date
.
getUTCHours
()
+
dir
);
return
new_date
},
moveDate
:
function
(
date
,
dir
){
if
(
!
dir
){
return
date
}
var
new_date
=
new
Date
(
date
.
valueOf
());
new_date
.
setUTCDate
(
new_date
.
getUTCDate
()
+
dir
);
return
new_date
},
moveMonth
:
function
(
date
,
dir
){
if
(
!
dir
){
return
date
}
var
new_date
=
new
Date
(
date
.
valueOf
()),
day
=
new_date
.
getUTCDate
(),
month
=
new_date
.
getUTCMonth
(),
mag
=
Math
.
abs
(
dir
),
new_month
,
test
;
dir
=
dir
>
0
?
1
:
-
1
;
if
(
mag
===
1
){
test
=
dir
===-
1
?
function
(){
return
new_date
.
getUTCMonth
()
===
month
}:
function
(){
return
new_date
.
getUTCMonth
()
!==
new_month
};
new_month
=
month
+
dir
;
new_date
.
setUTCMonth
(
new_month
);
if
(
new_month
<
0
||
new_month
>
11
){
new_month
=
(
new_month
+
12
)
%
12
}}
else
{
for
(
var
i
=
0
;
i
<
mag
;
i
++
){
new_date
=
this
.
moveMonth
(
new_date
,
dir
)}
new_month
=
new_date
.
getUTCMonth
();
new_date
.
setUTCDate
(
day
);
test
=
function
(){
return
new_month
!==
new_date
.
getUTCMonth
()}}
while
(
test
()){
new_date
.
setUTCDate
(
--
day
);
new_date
.
setUTCMonth
(
new_month
)}
return
new_date
},
moveYear
:
function
(
date
,
dir
){
return
this
.
moveMonth
(
date
,
dir
*
12
)},
dateWithinRange
:
function
(
date
){
return
date
>=
this
.
startDate
&&
date
<=
this
.
endDate
},
keydown
:
function
(
e
){
if
(
this
.
picker
.
is
(
":not(:visible)"
)){
if
(
e
.
keyCode
===
27
){
this
.
show
()}
return
}
var
dateChanged
=
false
,
dir
,
newDate
,
newViewDate
;
switch
(
e
.
keyCode
){
case
27
:
this
.
hide
();
e
.
preventDefault
();
break
;
case
37
:
case
39
:
if
(
!
this
.
keyboardNavigation
){
break
}
dir
=
e
.
keyCode
===
37
?
-
1
:
1
;
var
viewMode
=
this
.
viewMode
;
if
(
e
.
ctrlKey
){
viewMode
+=
2
}
else
{
if
(
e
.
shiftKey
){
viewMode
+=
1
}}
if
(
viewMode
===
4
){
newDate
=
this
.
moveYear
(
this
.
date
,
dir
);
newViewDate
=
this
.
moveYear
(
this
.
viewDate
,
dir
)}
else
{
if
(
viewMode
===
3
){
newDate
=
this
.
moveMonth
(
this
.
date
,
dir
);
newViewDate
=
this
.
moveMonth
(
this
.
viewDate
,
dir
)}
else
{
if
(
viewMode
===
2
){
newDate
=
this
.
moveDate
(
this
.
date
,
dir
);
newViewDate
=
this
.
moveDate
(
this
.
viewDate
,
dir
)}
else
{
if
(
viewMode
===
1
){
newDate
=
this
.
moveHour
(
this
.
date
,
dir
);
newViewDate
=
this
.
moveHour
(
this
.
viewDate
,
dir
)}
else
{
if
(
viewMode
===
0
){
newDate
=
this
.
moveMinute
(
this
.
date
,
dir
);
newViewDate
=
this
.
moveMinute
(
this
.
viewDate
,
dir
)}}}}}
if
(
this
.
dateWithinRange
(
newDate
)){
this
.
date
=
newDate
;
this
.
viewDate
=
newViewDate
;
this
.
setValue
();
this
.
update
();
e
.
preventDefault
();
dateChanged
=
true
}
break
;
case
38
:
case
40
:
if
(
!
this
.
keyboardNavigation
){
break
}
dir
=
e
.
keyCode
===
38
?
-
1
:
1
;
viewMode
=
this
.
viewMode
;
if
(
e
.
ctrlKey
){
viewMode
+=
2
}
else
{
if
(
e
.
shiftKey
){
viewMode
+=
1
}}
if
(
viewMode
===
4
){
newDate
=
this
.
moveYear
(
this
.
date
,
dir
);
newViewDate
=
this
.
moveYear
(
this
.
viewDate
,
dir
)}
else
{
if
(
viewMode
===
3
){
newDate
=
this
.
moveMonth
(
this
.
date
,
dir
);
newViewDate
=
this
.
moveMonth
(
this
.
viewDate
,
dir
)}
else
{
if
(
viewMode
===
2
){
newDate
=
this
.
moveDate
(
this
.
date
,
dir
*
7
);
newViewDate
=
this
.
moveDate
(
this
.
viewDate
,
dir
*
7
)}
else
{
if
(
viewMode
===
1
){
if
(
this
.
showMeridian
){
newDate
=
this
.
moveHour
(
this
.
date
,
dir
*
6
);
newViewDate
=
this
.
moveHour
(
this
.
viewDate
,
dir
*
6
)}
else
{
newDate
=
this
.
moveHour
(
this
.
date
,
dir
*
4
);
newViewDate
=
this
.
moveHour
(
this
.
viewDate
,
dir
*
4
)}}
else
{
if
(
viewMode
===
0
){
newDate
=
this
.
moveMinute
(
this
.
date
,
dir
*
4
);
newViewDate
=
this
.
moveMinute
(
this
.
viewDate
,
dir
*
4
)}}}}}
if
(
this
.
dateWithinRange
(
newDate
)){
this
.
date
=
newDate
;
this
.
viewDate
=
newViewDate
;
this
.
setValue
();
this
.
update
();
e
.
preventDefault
();
dateChanged
=
true
}
break
;
case
13
:
if
(
this
.
viewMode
!==
0
){
var
oldViewMode
=
this
.
viewMode
;
this
.
showMode
(
-
1
);
this
.
fill
();
if
(
oldViewMode
===
this
.
viewMode
&&
this
.
autoclose
){
this
.
hide
()}}
else
{
this
.
fill
();
if
(
this
.
autoclose
){
this
.
hide
()}}
e
.
preventDefault
();
break
;
case
9
:
this
.
hide
();
break
}
if
(
dateChanged
){
var
element
;
if
(
this
.
isInput
){
element
=
this
.
element
}
else
{
if
(
this
.
component
){
element
=
this
.
element
.
find
(
"input"
)}}
if
(
element
){
element
.
change
()}
this
.
element
.
trigger
({
type
:
"changeDate"
,
date
:
this
.
getDate
()})}},
showMode
:
function
(
dir
){
if
(
dir
){
var
newViewMode
=
Math
.
max
(
0
,
Math
.
min
(
DPGlobal
.
modes
.
length
-
1
,
this
.
viewMode
+
dir
));
if
(
newViewMode
>=
this
.
minView
&&
newViewMode
<=
this
.
maxView
){
this
.
element
.
trigger
({
type
:
"changeMode"
,
date
:
this
.
viewDate
,
oldViewMode
:
this
.
viewMode
,
newViewMode
:
newViewMode
});
this
.
viewMode
=
newViewMode
}}
this
.
picker
.
find
(
">div"
).
hide
().
filter
(
".datetimepicker-"
+
DPGlobal
.
modes
[
this
.
viewMode
].
clsName
).
css
(
"display"
,
"block"
);
this
.
updateNavArrows
()},
reset
:
function
(){
this
.
_setDate
(
null
,
"date"
)},
convertViewModeText
:
function
(
viewMode
){
switch
(
viewMode
){
case
4
:
return
"decade"
;
case
3
:
return
"year"
;
case
2
:
return
"month"
;
case
1
:
return
"day"
;
case
0
:
return
"hour"
}}};
var
old
=
$
.
fn
.
datetimepicker
;
$
.
fn
.
datetimepicker
=
function
(
option
){
var
args
=
Array
.
apply
(
null
,
arguments
);
args
.
shift
();
var
internal_return
;
this
.
each
(
function
(){
var
$this
=
$
(
this
),
data
=
$this
.
data
(
"datetimepicker"
),
options
=
typeof
option
===
"object"
&&
option
;
if
(
!
data
){
$this
.
data
(
"datetimepicker"
,(
data
=
new
Datetimepicker
(
this
,
$
.
extend
({},
$
.
fn
.
datetimepicker
.
defaults
,
options
))))}
if
(
typeof
option
===
"string"
&&
typeof
data
[
option
]
===
"function"
){
internal_return
=
data
[
option
].
apply
(
data
,
args
);
if
(
internal_return
!==
undefined
){
return
false
}}});
if
(
internal_return
!==
undefined
){
return
internal_return
}
else
{
return
this
}};
$
.
fn
.
datetimepicker
.
defaults
=
{};
$
.
fn
.
datetimepicker
.
Constructor
=
Datetimepicker
;
var
dates
=
$
.
fn
.
datetimepicker
.
dates
=
{
"zh-cn"
:{
days
:[
"星期日"
,
"星期一"
,
"星期二"
,
"星期三"
,
"星期四"
,
"星期五"
,
"星期六"
,
"星期日"
],
daysShort
:[
"周日"
,
"周一"
,
"周二"
,
"周三"
,
"周四"
,
"周五"
,
"周六"
,
"周日"
],
daysMin
:[
"日"
,
"一"
,
"二"
,
"三"
,
"四"
,
"五"
,
"六"
,
"日"
],
months
:[
"一月"
,
"二月"
,
"三月"
,
"四月"
,
"五月"
,
"六月"
,
"七月"
,
"八月"
,
"九月"
,
"十月"
,
"十一月"
,
"十二月"
],
monthsShort
:[
"一月"
,
"二月"
,
"三月"
,
"四月"
,
"五月"
,
"六月"
,
"七月"
,
"八月"
,
"九月"
,
"十月"
,
"十一月"
,
"十二月"
],
meridiem
:[
"上午"
,
"下午"
],
suffix
:[
"st"
,
"nd"
,
"rd"
,
"th"
],
today
:
"今天"
,
clear
:
"清除"
},
en
:{
days
:[
"Sunday"
,
"Monday"
,
"Tuesday"
,
"Wednesday"
,
"Thursday"
,
"Friday"
,
"Saturday"
,
"Sunday"
],
daysShort
:[
"Sun"
,
"Mon"
,
"Tue"
,
"Wed"
,
"Thu"
,
"Fri"
,
"Sat"
,
"Sun"
],
daysMin
:[
"Su"
,
"Mo"
,
"Tu"
,
"We"
,
"Th"
,
"Fr"
,
"Sa"
,
"Su"
],
months
:[
"January"
,
"February"
,
"March"
,
"April"
,
"May"
,
"June"
,
"July"
,
"August"
,
"September"
,
"October"
,
"November"
,
"December"
],
monthsShort
:[
"Jan"
,
"Feb"
,
"Mar"
,
"Apr"
,
"May"
,
"Jun"
,
"Jul"
,
"Aug"
,
"Sep"
,
"Oct"
,
"Nov"
,
"Dec"
],
meridiem
:[
"am"
,
"pm"
],
suffix
:[
"st"
,
"nd"
,
"rd"
,
"th"
],
today
:
"Today"
,
clear
:
"Clear"
}};
var
DPGlobal
=
{
modes
:[{
clsName
:
"minutes"
,
navFnc
:
"Hours"
,
navStep
:
1
},{
clsName
:
"hours"
,
navFnc
:
"Date"
,
navStep
:
1
},{
clsName
:
"days"
,
navFnc
:
"Month"
,
navStep
:
1
},{
clsName
:
"months"
,
navFnc
:
"FullYear"
,
navStep
:
1
},{
clsName
:
"years"
,
navFnc
:
"FullYear"
,
navStep
:
10
}],
isLeapYear
:
function
(
year
){
return
(((
year
%
4
===
0
)
&&
(
year
%
100
!==
0
))
||
(
year
%
400
===
0
))},
getDaysInMonth
:
function
(
year
,
month
){
return
[
31
,(
DPGlobal
.
isLeapYear
(
year
)?
29
:
28
),
31
,
30
,
31
,
30
,
31
,
31
,
30
,
31
,
30
,
31
][
month
]},
getDefaultFormat
:
function
(
type
,
field
){
if
(
type
===
"standard"
){
if
(
field
===
"input"
){
return
"yyyy-mm-dd hh:ii"
}
else
{
return
"yyyy-mm-dd hh:ii:ss"
}}
else
{
if
(
type
===
"php"
){
if
(
field
===
"input"
){
return
"Y-m-d H:i"
}
else
{
return
"Y-m-d H:i:s"
}}
else
{
throw
new
Error
(
"Invalid format type."
)}}},
validParts
:
function
(
type
){
if
(
type
===
"standard"
){
return
/t|hh
?
|HH
?
|p|P|z|Z|ii
?
|ss
?
|dd
?
|DD
?
|mm
?
|MM
?
|yy
(?:
yy
)?
/g
}
else
{
if
(
type
===
"php"
){
return
/
[
dDjlNwzFmMnStyYaABgGhHis
]
/g
}
else
{
throw
new
Error
(
"Invalid format type."
)}}},
nonpunctuation
:
/
[^
-
\/
:-@
\[
-`{-~
\t\n\r
TZ
]
+/g
,
parseFormat
:
function
(
format
,
type
){
var
separators
=
format
.
replace
(
this
.
validParts
(
type
),
"
\
0"
).
split
(
"
\
0"
),
parts
=
format
.
match
(
this
.
validParts
(
type
));
if
(
!
separators
||!
separators
.
length
||!
parts
||
parts
.
length
===
0
){
throw
new
Error
(
"Invalid date format."
)}
return
{
separators
:
separators
,
parts
:
parts
}},
parseDate
:
function
(
date
,
format
,
language
,
type
,
timezone
){
if
(
date
instanceof
Date
){
var
dateUTC
=
new
Date
(
date
.
valueOf
()
-
date
.
getTimezoneOffset
()
*
60000
);
dateUTC
.
setMilliseconds
(
0
);
return
dateUTC
}
if
(
/^
\d{4}\-\d{1,2}\-\d{1,2}
$/
.
test
(
date
)){
format
=
this
.
parseFormat
(
"yyyy-mm-dd"
,
type
)}
if
(
/^
\d{4}\-\d{1,2}\-\d{1,2}[
T
]\d{1,2}\:\d{1,2}
$/
.
test
(
date
)){
format
=
this
.
parseFormat
(
"yyyy-mm-dd hh:ii"
,
type
)}
if
(
/^
\d{4}\-\d{1,2}\-\d{1,2}[
T
]\d{1,2}\:\d{1,2}\:\d{1,2}[
Z
]{0,1}
$/
.
test
(
date
)){
format
=
this
.
parseFormat
(
"yyyy-mm-dd hh:ii:ss"
,
type
)}
if
(
/^
[
-+
]\d
+
[
dmwy
]([\s
,
]
+
[
-+
]\d
+
[
dmwy
])
*$/
.
test
(
date
)){
var
part_re
=
/
([
-+
]\d
+
)([
dmwy
])
/
,
parts
=
date
.
match
(
/
([
-+
]\d
+
)([
dmwy
])
/g
),
part
,
dir
;
date
=
new
Date
();
for
(
var
i
=
0
;
i
<
parts
.
length
;
i
++
){
part
=
part_re
.
exec
(
parts
[
i
]);
dir
=
parseInt
(
part
[
1
]);
switch
(
part
[
2
]){
case
"d"
:
date
.
setUTCDate
(
date
.
getUTCDate
()
+
dir
);
break
;
case
"m"
:
date
=
Datetimepicker
.
prototype
.
moveMonth
.
call
(
Datetimepicker
.
prototype
,
date
,
dir
);
break
;
case
"w"
:
date
.
setUTCDate
(
date
.
getUTCDate
()
+
dir
*
7
);
break
;
case
"y"
:
date
=
Datetimepicker
.
prototype
.
moveYear
.
call
(
Datetimepicker
.
prototype
,
date
,
dir
);
break
}}
return
UTCDate
(
date
.
getUTCFullYear
(),
date
.
getUTCMonth
(),
date
.
getUTCDate
(),
date
.
getUTCHours
(),
date
.
getUTCMinutes
(),
date
.
getUTCSeconds
(),
0
)}
var
parts
=
date
&&
date
.
toString
().
match
(
this
.
nonpunctuation
)
||
[],
date
=
new
Date
(
0
,
0
,
0
,
0
,
0
,
0
,
0
),
parsed
=
{},
setters_order
=
[
"hh"
,
"h"
,
"ii"
,
"i"
,
"ss"
,
"s"
,
"yyyy"
,
"yy"
,
"M"
,
"MM"
,
"m"
,
"mm"
,
"D"
,
"DD"
,
"d"
,
"dd"
,
"H"
,
"HH"
,
"p"
,
"P"
,
"z"
,
"Z"
],
setters_map
=
{
hh
:
function
(
d
,
v
){
return
d
.
setUTCHours
(
v
)},
h
:
function
(
d
,
v
){
return
d
.
setUTCHours
(
v
)},
HH
:
function
(
d
,
v
){
return
d
.
setUTCHours
(
v
===
12
?
0
:
v
)},
H
:
function
(
d
,
v
){
return
d
.
setUTCHours
(
v
===
12
?
0
:
v
)},
ii
:
function
(
d
,
v
){
return
d
.
setUTCMinutes
(
v
)},
i
:
function
(
d
,
v
){
return
d
.
setUTCMinutes
(
v
)},
ss
:
function
(
d
,
v
){
return
d
.
setUTCSeconds
(
v
)},
s
:
function
(
d
,
v
){
return
d
.
setUTCSeconds
(
v
)},
yyyy
:
function
(
d
,
v
){
return
d
.
setUTCFullYear
(
v
)},
yy
:
function
(
d
,
v
){
return
d
.
setUTCFullYear
(
2000
+
v
)},
m
:
function
(
d
,
v
){
v
-=
1
;
while
(
v
<
0
){
v
+=
12
}
v
%=
12
;
d
.
setUTCMonth
(
v
);
while
(
d
.
getUTCMonth
()
!==
v
){
if
(
isNaN
(
d
.
getUTCMonth
())){
return
d
}
else
{
d
.
setUTCDate
(
d
.
getUTCDate
()
-
1
)}}
return
d
},
d
:
function
(
d
,
v
){
return
d
.
setUTCDate
(
v
)},
p
:
function
(
d
,
v
){
return
d
.
setUTCHours
(
v
===
1
?
d
.
getUTCHours
()
+
12
:
d
.
getUTCHours
())},
z
:
function
(){
return
timezone
}},
val
,
filtered
,
part
;
setters_map
[
"M"
]
=
setters_map
[
"MM"
]
=
setters_map
[
"mm"
]
=
setters_map
[
"m"
];
setters_map
[
"dd"
]
=
setters_map
[
"d"
];
setters_map
[
"P"
]
=
setters_map
[
"p"
];
setters_map
[
"Z"
]
=
setters_map
[
"z"
];
date
=
UTCDate
(
date
.
getFullYear
(),
date
.
getMonth
(),
date
.
getDate
(),
date
.
getHours
(),
date
.
getMinutes
(),
date
.
getSeconds
());
if
(
parts
.
length
===
format
.
parts
.
length
){
for
(
var
i
=
0
,
cnt
=
format
.
parts
.
length
;
i
<
cnt
;
i
++
){
val
=
parseInt
(
parts
[
i
],
10
);
part
=
format
.
parts
[
i
];
if
(
isNaN
(
val
)){
switch
(
part
){
case
"MM"
:
filtered
=
$
(
dates
[
language
].
months
).
filter
(
function
(){
var
m
=
this
.
slice
(
0
,
parts
[
i
].
length
),
p
=
parts
[
i
].
slice
(
0
,
m
.
length
);
return
m
===
p
});
val
=
$
.
inArray
(
filtered
[
0
],
dates
[
language
].
months
)
+
1
;
break
;
case
"M"
:
filtered
=
$
(
dates
[
language
].
monthsShort
).
filter
(
function
(){
var
m
=
this
.
slice
(
0
,
parts
[
i
].
length
),
p
=
parts
[
i
].
slice
(
0
,
m
.
length
);
return
m
.
toLowerCase
()
===
p
.
toLowerCase
()});
val
=
$
.
inArray
(
filtered
[
0
],
dates
[
language
].
monthsShort
)
+
1
;
break
;
case
"p"
:
case
"P"
:
val
=
$
.
inArray
(
parts
[
i
].
toLowerCase
(),
dates
[
language
].
meridiem
);
break
;
case
"z"
:
case
"Z"
:
timezone
;
break
}}
parsed
[
part
]
=
val
}
for
(
var
i
=
0
,
s
;
i
<
setters_order
.
length
;
i
++
){
s
=
setters_order
[
i
];
if
(
s
in
parsed
&&!
isNaN
(
parsed
[
s
])){
setters_map
[
s
](
date
,
parsed
[
s
])}}}
return
date
},
formatDate
:
function
(
date
,
format
,
language
,
type
,
timezone
){
if
(
date
===
null
){
return
""
}
var
val
;
if
(
type
===
"standard"
){
val
=
{
t
:
date
.
getTime
(),
yy
:
date
.
getUTCFullYear
().
toString
().
substring
(
2
),
yyyy
:
date
.
getUTCFullYear
(),
m
:
date
.
getUTCMonth
()
+
1
,
M
:
dates
[
language
].
monthsShort
[
date
.
getUTCMonth
()],
MM
:
dates
[
language
].
months
[
date
.
getUTCMonth
()],
d
:
date
.
getUTCDate
(),
D
:
dates
[
language
].
daysShort
[
date
.
getUTCDay
()],
DD
:
dates
[
language
].
days
[
date
.
getUTCDay
()],
p
:(
dates
[
language
].
meridiem
.
length
===
2
?
dates
[
language
].
meridiem
[
date
.
getUTCHours
()
<
12
?
0
:
1
]:
""
),
h
:
date
.
getUTCHours
(),
i
:
date
.
getUTCMinutes
(),
s
:
date
.
getUTCSeconds
(),
z
:
timezone
};
if
(
dates
[
language
].
meridiem
.
length
===
2
){
val
.
H
=
(
val
.
h
%
12
===
0
?
12
:
val
.
h
%
12
)}
else
{
val
.
H
=
val
.
h
}
val
.
HH
=
(
val
.
H
<
10
?
"0"
:
""
)
+
val
.
H
;
val
.
P
=
val
.
p
.
toUpperCase
();
val
.
Z
=
val
.
z
;
val
.
hh
=
(
val
.
h
<
10
?
"0"
:
""
)
+
val
.
h
;
val
.
ii
=
(
val
.
i
<
10
?
"0"
:
""
)
+
val
.
i
;
val
.
ss
=
(
val
.
s
<
10
?
"0"
:
""
)
+
val
.
s
;
val
.
dd
=
(
val
.
d
<
10
?
"0"
:
""
)
+
val
.
d
;
val
.
mm
=
(
val
.
m
<
10
?
"0"
:
""
)
+
val
.
m
}
else
{
if
(
type
===
"php"
){
val
=
{
y
:
date
.
getUTCFullYear
().
toString
().
substring
(
2
),
Y
:
date
.
getUTCFullYear
(),
F
:
dates
[
language
].
months
[
date
.
getUTCMonth
()],
M
:
dates
[
language
].
monthsShort
[
date
.
getUTCMonth
()],
n
:
date
.
getUTCMonth
()
+
1
,
t
:
DPGlobal
.
getDaysInMonth
(
date
.
getUTCFullYear
(),
date
.
getUTCMonth
()),
j
:
date
.
getUTCDate
(),
l
:
dates
[
language
].
days
[
date
.
getUTCDay
()],
D
:
dates
[
language
].
daysShort
[
date
.
getUTCDay
()],
w
:
date
.
getUTCDay
(),
N
:(
date
.
getUTCDay
()
===
0
?
7
:
date
.
getUTCDay
()),
S
:(
date
.
getUTCDate
()
%
10
<=
dates
[
language
].
suffix
.
length
?
dates
[
language
].
suffix
[
date
.
getUTCDate
()
%
10
-
1
]:
""
),
a
:(
dates
[
language
].
meridiem
.
length
===
2
?
dates
[
language
].
meridiem
[
date
.
getUTCHours
()
<
12
?
0
:
1
]:
""
),
g
:(
date
.
getUTCHours
()
%
12
===
0
?
12
:
date
.
getUTCHours
()
%
12
),
G
:
date
.
getUTCHours
(),
i
:
date
.
getUTCMinutes
(),
s
:
date
.
getUTCSeconds
()};
val
.
m
=
(
val
.
n
<
10
?
"0"
:
""
)
+
val
.
n
;
val
.
d
=
(
val
.
j
<
10
?
"0"
:
""
)
+
val
.
j
;
val
.
A
=
val
.
a
.
toString
().
toUpperCase
();
val
.
h
=
(
val
.
g
<
10
?
"0"
:
""
)
+
val
.
g
;
val
.
H
=
(
val
.
G
<
10
?
"0"
:
""
)
+
val
.
G
;
val
.
i
=
(
val
.
i
<
10
?
"0"
:
""
)
+
val
.
i
;
val
.
s
=
(
val
.
s
<
10
?
"0"
:
""
)
+
val
.
s
}
else
{
throw
new
Error
(
"Invalid format type."
)}}
var
date
=
[],
seps
=
$
.
extend
([],
format
.
separators
);
for
(
var
i
=
0
,
cnt
=
format
.
parts
.
length
;
i
<
cnt
;
i
++
){
if
(
seps
.
length
){
date
.
push
(
seps
.
shift
())}
date
.
push
(
val
[
format
.
parts
[
i
]])}
if
(
seps
.
length
){
date
.
push
(
seps
.
shift
())}
return
date
.
join
(
""
)},
convertViewMode
:
function
(
viewMode
){
switch
(
viewMode
){
case
4
:
case
"decade"
:
viewMode
=
4
;
break
;
case
3
:
case
"year"
:
viewMode
=
3
;
break
;
case
2
:
case
"month"
:
viewMode
=
2
;
break
;
case
1
:
case
"day"
:
viewMode
=
1
;
break
;
case
0
:
case
"hour"
:
viewMode
=
0
;
break
}
return
viewMode
},
headTemplate
:
"<thead>"
+
"<tr>"
+
'<th class="prev"><i class="{iconType} {leftArrow}"/></th>'
+
'<th colspan="5" class="switch"></th>'
+
'<th class="next"><i class="{iconType} {rightArrow}"/></th>'
+
"</tr>"
+
"</thead>"
,
headTemplateV3
:
"<thead>"
+
"<tr>"
+
'<th class="prev"><span class="{iconType} {leftArrow}"></span> </th>'
+
'<th colspan="5" class="switch"></th>'
+
'<th class="next"><span class="{iconType} {rightArrow}"></span> </th>'
+
"</tr>"
+
"</thead>"
,
contTemplate
:
'<tbody><tr><td colspan="7"></td></tr></tbody>'
,
footTemplate
:
"<tfoot>"
+
'<tr><th colspan="7" class="today"></th></tr>'
+
'<tr><th colspan="7" class="clear"></th></tr>'
+
"</tfoot>"
};
DPGlobal
.
template
=
'<div class="datetimepicker">'
+
'<div class="datetimepicker-minutes">'
+
'<table class=" table-condensed">'
+
DPGlobal
.
headTemplate
+
DPGlobal
.
contTemplate
+
DPGlobal
.
footTemplate
+
"</table>"
+
"</div>"
+
'<div class="datetimepicker-hours">'
+
'<table class=" table-condensed">'
+
DPGlobal
.
headTemplate
+
DPGlobal
.
contTemplate
+
DPGlobal
.
footTemplate
+
"</table>"
+
"</div>"
+
'<div class="datetimepicker-days">'
+
'<table class=" table-condensed">'
+
DPGlobal
.
headTemplate
+
"<tbody></tbody>"
+
DPGlobal
.
footTemplate
+
"</table>"
+
"</div>"
+
'<div class="datetimepicker-months">'
+
'<table class="table-condensed">'
+
DPGlobal
.
headTemplate
+
DPGlobal
.
contTemplate
+
DPGlobal
.
footTemplate
+
"</table>"
+
"</div>"
+
'<div class="datetimepicker-years">'
+
'<table class="table-condensed">'
+
DPGlobal
.
headTemplate
+
DPGlobal
.
contTemplate
+
DPGlobal
.
footTemplate
+
"</table>"
+
"</div>"
+
"</div>"
;
DPGlobal
.
templateV3
=
'<div class="datetimepicker">'
+
'<div class="datetimepicker-minutes">'
+
'<table class=" table-condensed">'
+
DPGlobal
.
headTemplateV3
+
DPGlobal
.
contTemplate
+
DPGlobal
.
footTemplate
+
"</table>"
+
"</div>"
+
'<div class="datetimepicker-hours">'
+
'<table class=" table-condensed">'
+
DPGlobal
.
headTemplateV3
+
DPGlobal
.
contTemplate
+
DPGlobal
.
footTemplate
+
"</table>"
+
"</div>"
+
'<div class="datetimepicker-days">'
+
'<table class=" table-condensed">'
+
DPGlobal
.
headTemplateV3
+
"<tbody></tbody>"
+
DPGlobal
.
footTemplate
+
"</table>"
+
"</div>"
+
'<div class="datetimepicker-months">'
+
'<table class="table-condensed">'
+
DPGlobal
.
headTemplateV3
+
DPGlobal
.
contTemplate
+
DPGlobal
.
footTemplate
+
"</table>"
+
"</div>"
+
'<div class="datetimepicker-years">'
+
'<table class="table-condensed">'
+
DPGlobal
.
headTemplateV3
+
DPGlobal
.
contTemplate
+
DPGlobal
.
footTemplate
+
"</table>"
+
"</div>"
+
"</div>"
;
$
.
fn
.
datetimepicker
.
DPGlobal
=
DPGlobal
;
$
.
fn
.
datetimepicker
.
noConflict
=
function
(){
$
.
fn
.
datetimepicker
=
old
;
return
this
};
$
(
document
).
on
(
"focus.datetimepicker.data-api click.datetimepicker.data-api"
,
'[data-provide="datetimepicker"]'
,
function
(
e
){
var
$this
=
$
(
this
);
if
(
$this
.
data
(
"datetimepicker"
)){
return
}
e
.
preventDefault
();
$this
.
datetimepicker
(
"show"
)});
$
(
function
(){
$
(
'[data-provide="datetimepicker-inline"]'
).
datetimepicker
()})}));
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment