新增功能
- 在日期范围模式下,左下角新增快捷选中功能 - 新增在输入框手动输入时,日历自动跳转,同时支持"MM/dd/yyyy"的英文日期格式 修复问题 - 年、月选择模式下,选中就隐藏选择器pull/65/head
parent
bfc0c1bf6d
commit
fd5794c80d
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
224
src/laydate.js
224
src/laydate.js
|
@ -675,7 +675,7 @@
|
||||||
|
|
||||||
//生成底部栏
|
//生成底部栏
|
||||||
lay(divFooter).html(function(){
|
lay(divFooter).html(function(){
|
||||||
var html = [], btns = [];
|
var html = [], btns = [], shortcuts = [];
|
||||||
if(options.type === 'datetime'){
|
if(options.type === 'datetime'){
|
||||||
html.push('<span lay-type="datetime" class="laydate-btns-time">'+ lang.timeTips +'</span>');
|
html.push('<span lay-type="datetime" class="laydate-btns-time">'+ lang.timeTips +'</span>');
|
||||||
}
|
}
|
||||||
|
@ -683,9 +683,22 @@
|
||||||
var title = lang.tools[item] || 'btn';
|
var title = lang.tools[item] || 'btn';
|
||||||
if(options.range && item === 'now') return;
|
if(options.range && item === 'now') return;
|
||||||
if(isStatic && item === 'clear') title = options.lang === 'cn' ? '重置' : 'Reset';
|
if(isStatic && item === 'clear') title = options.lang === 'cn' ? '重置' : 'Reset';
|
||||||
btns.push('<span lay-type="'+ item +'" class="laydate-btns-'+ item +'">'+ title +'</span>');
|
btns.push('<span lay-type="' + item + '" class="laydate-btns-' + item + '">' + title + '</span>');
|
||||||
});
|
});
|
||||||
html.push('<div class="laydate-footer-btns">'+ btns.join('') +'</div>');
|
|
||||||
|
if (options.range) {
|
||||||
|
if (that.config.type == 'date') {
|
||||||
|
shortcuts.push('<span lay-type="shortcut" class="laydate-shortcut-btn" data-type="day" data-count="30">' + (options.lang == 'cn' ? '最近30天' : '30days') + '</span>');
|
||||||
|
shortcuts.push('<span lay-type="shortcut" class="laydate-shortcut-btn" data-type="month" data-count="1">' + (options.lang == 'cn' ? '上月' : '-1month') + '</span>');
|
||||||
|
shortcuts.push('<span lay-type="shortcut" class="laydate-shortcut-btn" data-type="month" data-count="0">' + (options.lang == 'cn' ? '本月' : 'month') + '</span>');
|
||||||
|
}
|
||||||
|
shortcuts.push('<span lay-type="shortcut" class="laydate-shortcut-btn" data-type="quarter" data-count="1">' + (options.lang == 'cn' ? '上季度' : '-1quarter') + '</span>');
|
||||||
|
shortcuts.push('<span lay-type="shortcut" class="laydate-shortcut-btn" data-type="quarter" data-count="0">' + (options.lang == 'cn' ? '本季度' : 'quarter') + '</span>');
|
||||||
|
shortcuts.push('<span lay-type="shortcut" class="laydate-shortcut-btn" data-type="year" data-count="1">' + (options.lang == 'cn' ? '上年' : '-1year') + '</span>');
|
||||||
|
shortcuts.push('<span lay-type="shortcut" class="laydate-shortcut-btn" data-type="year" data-count="0">' + (options.lang == 'cn' ? '今年' : 'year') + '</span>');
|
||||||
|
}
|
||||||
|
|
||||||
|
html.push('<div class="laydate-footer-shortcuts">' + shortcuts.join('') + '</div><div class="laydate-footer-btns">' + btns.join('') + '</div>');
|
||||||
return html.join('');
|
return html.join('');
|
||||||
}());
|
}());
|
||||||
|
|
||||||
|
@ -1231,6 +1244,11 @@
|
||||||
dateTime[type] = ym;
|
dateTime[type] = ym;
|
||||||
if(isAlone) that.startDate[type] = ym;
|
if(isAlone) that.startDate[type] = ym;
|
||||||
that.limit(lay(that.footer).find(ELEM_CONFIRM), null, 0);
|
that.limit(lay(that.footer).find(ELEM_CONFIRM), null, 0);
|
||||||
|
|
||||||
|
// 如果是年或者月模式,选中日期就关闭弹框
|
||||||
|
if ((type == "month" && that.config.type == "month") || (type == "year" && that.config.type == "year")) {
|
||||||
|
that.setValue(that.parse()).remove().done();
|
||||||
|
}
|
||||||
} else { //范围选择
|
} else { //范围选择
|
||||||
if(isAlone){ //非date/datetime类型
|
if(isAlone){ //非date/datetime类型
|
||||||
that.endDate[type] = ym;
|
that.endDate[type] = ym;
|
||||||
|
@ -1590,8 +1608,108 @@
|
||||||
that.closeList();
|
that.closeList();
|
||||||
lay(btn).attr('lay-type', 'datetime').html(that.lang().timeTips);
|
lay(btn).attr('lay-type', 'datetime').html(that.lang().timeTips);
|
||||||
}
|
}
|
||||||
|
|
||||||
//清空、重置
|
// 快速选择日期
|
||||||
|
, shortcut: function () {
|
||||||
|
var $btn = btn;
|
||||||
|
var type = $btn.getAttribute("data-type");
|
||||||
|
var count = $btn.getAttribute("data-count");
|
||||||
|
var currentDate = new Date();
|
||||||
|
var addDays = function (curDate, d) {
|
||||||
|
curDate.setDate(curDate.getDate() + d);
|
||||||
|
};
|
||||||
|
var addMonths = function (curDate, m) {
|
||||||
|
var d = curDate.getDate();
|
||||||
|
curDate.setMonth(curDate.getMonth() + m);
|
||||||
|
if (curDate.getDate() < d)
|
||||||
|
curDate.setDate(0);
|
||||||
|
};
|
||||||
|
var addYears = function (curDate, y) {
|
||||||
|
var m = curDate.getMonth();
|
||||||
|
curDate.setFullYear(curDate.getFullYear() + y);
|
||||||
|
if (m < curDate.getMonth()) {
|
||||||
|
curDate.setDate(0);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 默认
|
||||||
|
that.endDate = {
|
||||||
|
year: currentDate.getFullYear(),
|
||||||
|
month: currentDate.getMonth(),
|
||||||
|
date: currentDate.getDate(),
|
||||||
|
hours: currentDate.getHours(),
|
||||||
|
minutes: currentDate.getMinutes(),
|
||||||
|
seconds: currentDate.getSeconds()
|
||||||
|
};
|
||||||
|
|
||||||
|
if (type == "day") {
|
||||||
|
addDays(currentDate, -count);
|
||||||
|
} else if (type == "month") {
|
||||||
|
if (count == 0) {
|
||||||
|
currentDate.setDate(1);
|
||||||
|
} else {
|
||||||
|
addMonths(currentDate, -1);
|
||||||
|
that.endDate.date = new Date((new Date().setDate(0))).getDate();
|
||||||
|
that.endDate.month = currentDate.getMonth();
|
||||||
|
currentDate.setDate(1);
|
||||||
|
}
|
||||||
|
} else if (type == "quarter") {
|
||||||
|
if (count == 0) {
|
||||||
|
addMonths(currentDate, -(2 - (that.endDate.month + 1) % 3));
|
||||||
|
} else {
|
||||||
|
that.endDate.month = that.endDate.month - (3 - (that.endDate.month + 1) % 3);
|
||||||
|
that.endDate.month = that.endDate.month < 0 ? 12 + that.endDate.month : that.endDate.month;
|
||||||
|
currentDate.setMonth(that.endDate.month - 2);
|
||||||
|
that.endDate.date = new Date(that.endDate.year, that.endDate.month + 1, "0").getDate();
|
||||||
|
}
|
||||||
|
} else if (type == "year") {
|
||||||
|
if (count == 0) {
|
||||||
|
currentDate.setMonth(0);
|
||||||
|
currentDate.setDate(1);
|
||||||
|
} else {
|
||||||
|
addYears(currentDate, -1);
|
||||||
|
that.endDate.year = currentDate.getFullYear();
|
||||||
|
that.endDate.month = 11;
|
||||||
|
that.endDate.date = 31;
|
||||||
|
currentDate.setMonth(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
that.config.dateTime = {
|
||||||
|
year: currentDate.getFullYear(),
|
||||||
|
month: currentDate.getMonth(),
|
||||||
|
date: currentDate.getDate(),
|
||||||
|
hours: currentDate.getHours(),
|
||||||
|
minutes: currentDate.getMinutes(),
|
||||||
|
seconds: currentDate.getSeconds()
|
||||||
|
};
|
||||||
|
that.startDate = {
|
||||||
|
year: currentDate.getFullYear(),
|
||||||
|
month: currentDate.getMonth(),
|
||||||
|
date: currentDate.getDate(),
|
||||||
|
hours: currentDate.getHours(),
|
||||||
|
minutes: currentDate.getMinutes(),
|
||||||
|
seconds: currentDate.getSeconds()
|
||||||
|
};
|
||||||
|
that.startYMD = {
|
||||||
|
year: currentDate.getFullYear(),
|
||||||
|
month: currentDate.getMonth(),
|
||||||
|
date: currentDate.getDate()
|
||||||
|
};
|
||||||
|
|
||||||
|
that.stampRange();
|
||||||
|
that.startState = true;
|
||||||
|
that.endState = true;
|
||||||
|
if (lay('.layui-laydate').length > 0) {
|
||||||
|
that.calendar();
|
||||||
|
}
|
||||||
|
that.setValue(that.parse()).remove();
|
||||||
|
that.done(null, 'change');
|
||||||
|
|
||||||
|
lay(that.footer).find(ELEM_CONFIRM).removeClass(DISABLED);
|
||||||
|
}
|
||||||
|
|
||||||
|
//清空、重置
|
||||||
,clear: function(){
|
,clear: function(){
|
||||||
that.setValue('').remove();
|
that.setValue('').remove();
|
||||||
isStatic && (
|
isStatic && (
|
||||||
|
@ -1647,10 +1765,11 @@
|
||||||
|
|
||||||
,elemCont = that.elemCont[index || 0]
|
,elemCont = that.elemCont[index || 0]
|
||||||
,listYM = that.listYM[index]
|
,listYM = that.listYM[index]
|
||||||
,addSubYeay = function(type){
|
,addSubYeay = function(type, number){
|
||||||
var startEnd = ['startDate', 'endDate'][index]
|
var startEnd = ['startDate', 'endDate'][index]
|
||||||
,isYear = lay(elemCont).find('.laydate-year-list')[0]
|
,isYear = lay(elemCont).find('.laydate-year-list')[0]
|
||||||
,isMonth = lay(elemCont).find('.laydate-month-list')[0];
|
,isMonth = lay(elemCont).find('.laydate-month-list')[0]
|
||||||
|
,number = number === undefined ? 1 : number;
|
||||||
|
|
||||||
//切换年列表
|
//切换年列表
|
||||||
if(isYear){
|
if(isYear){
|
||||||
|
@ -1659,7 +1778,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isMonth){ //切换月面板中的年
|
if(isMonth){ //切换月面板中的年
|
||||||
type ? listYM[0]-- : listYM[0]++;
|
type ? listYM[0] = listYM[0] - number : listYM[0] = listYM[0] + number;
|
||||||
that.list('month', index);
|
that.list('month', index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1684,6 +1803,13 @@
|
||||||
that.checkDate('limit').calendar();
|
that.checkDate('limit').calendar();
|
||||||
options.range || that.done(null, 'change');
|
options.range || that.done(null, 'change');
|
||||||
}
|
}
|
||||||
|
,goToYear: function (year) {
|
||||||
|
var diffYear = year - dateTime.year;
|
||||||
|
if (addSubYeay('sub', diffYear)) return;
|
||||||
|
dateTime.year = year;
|
||||||
|
that.checkDate('limit').calendar();
|
||||||
|
options.range || that.done(null, 'change');
|
||||||
|
}
|
||||||
,prevMonth: function(){
|
,prevMonth: function(){
|
||||||
var YM = that.getAsYM(dateTime.year, dateTime.month, 'sub');
|
var YM = that.getAsYM(dateTime.year, dateTime.month, 'sub');
|
||||||
lay.extend(dateTime, {
|
lay.extend(dateTime, {
|
||||||
|
@ -1702,6 +1828,13 @@
|
||||||
that.checkDate('limit').calendar();
|
that.checkDate('limit').calendar();
|
||||||
options.range || that.done(null, 'change');
|
options.range || that.done(null, 'change');
|
||||||
}
|
}
|
||||||
|
,goToMonth: function (month) {
|
||||||
|
lay.extend(dateTime, {
|
||||||
|
month: month
|
||||||
|
});
|
||||||
|
that.checkDate('limit').calendar();
|
||||||
|
options.range || that.done(null, 'change');
|
||||||
|
}
|
||||||
,nextYear: function(){
|
,nextYear: function(){
|
||||||
if(addSubYeay()) return;
|
if(addSubYeay()) return;
|
||||||
dateTime.year++
|
dateTime.year++
|
||||||
|
@ -1813,8 +1946,79 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
//自适应定位
|
// 手动输入日期,日历同步跳转
|
||||||
|
if (!options.range && (options.type == "month" || options.type == "date")) {
|
||||||
|
lay(options.elem[0]).on('keyup', function (e) {
|
||||||
|
var dateTime = options.dateTime;
|
||||||
|
var value = e.currentTarget.value;
|
||||||
|
|
||||||
|
if (options.lang == "cn") {
|
||||||
|
if (/^(\d{4})[\s\-\\]?([0-1][0-9])[\s\-\\]?([0-3][0-9])$/ig.test(value)) {
|
||||||
|
lay.extend(dateTime, {
|
||||||
|
year: parseInt(RegExp.$1),
|
||||||
|
month: parseInt(RegExp.$2) - 1,
|
||||||
|
date: parseInt(RegExp.$3)
|
||||||
|
});
|
||||||
|
that.setValue(that.parse(1, dateTime));
|
||||||
|
that.checkDate('limit').calendar();
|
||||||
|
that.done(null, 'change');
|
||||||
|
} else if (/^(\d{4})[\s\-\\]?([0-1][0-9])$/ig.test(value)) {
|
||||||
|
lay.extend(dateTime, {
|
||||||
|
year: parseInt(RegExp.$1),
|
||||||
|
month: parseInt(RegExp.$2) - 1
|
||||||
|
});
|
||||||
|
if (options.type == "month") {
|
||||||
|
that.setValue(that.parse(1, dateTime));
|
||||||
|
}
|
||||||
|
that.change(0).goToMonth(dateTime.month);
|
||||||
|
} else if (/^(\d{4})$/ig.test(value)) {
|
||||||
|
lay.extend(dateTime, {
|
||||||
|
year: parseInt(RegExp.$1)
|
||||||
|
});
|
||||||
|
if (options.type == "year") {
|
||||||
|
that.setValue(that.parse(1, dateTime));
|
||||||
|
}
|
||||||
|
that.change(0).goToYear(dateTime.year);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (options.lang == "en") {
|
||||||
|
if (/^([0-1][0-9])$/ig.test(value) && (options.type == "month" || options.type == "date" )) {
|
||||||
|
lay.extend(dateTime, {
|
||||||
|
month: parseInt(RegExp.$1) - 1
|
||||||
|
});
|
||||||
|
that.change(0).goToMonth(dateTime.month);
|
||||||
|
} else if (/^([0-1][0-9])[\s\-\\]?([0-1][0-9])$/ig.test(value) && options.type == "date") {
|
||||||
|
lay.extend(dateTime, {
|
||||||
|
month: parseInt(RegExp.$1) - 1,
|
||||||
|
date: parseInt(RegExp.$2)
|
||||||
|
});
|
||||||
|
that.checkDate('limit').calendar();
|
||||||
|
that.done(null, 'change');
|
||||||
|
} else if (/^([0-1][0-9])[\s\-\\]?(\d{4})$/ig.test(value) && options.type == "month") {
|
||||||
|
lay.extend(dateTime, {
|
||||||
|
year: parseInt(RegExp.$2),
|
||||||
|
month: parseInt(RegExp.$1) - 1
|
||||||
|
});
|
||||||
|
that.listYM[0] = [dateTime.year, dateTime.month];
|
||||||
|
that.change(0).goToYear(dateTime.year);
|
||||||
|
that.setValue(that.parse(1, dateTime));
|
||||||
|
} else if (/^([0-1][0-9])[\s\-\\]?([0-1][0-9])[\s\-\\]?(\d{4})$/ig.test(value)) {
|
||||||
|
lay.extend(dateTime, {
|
||||||
|
year: parseInt(RegExp.$3),
|
||||||
|
month: parseInt(RegExp.$1) - 1,
|
||||||
|
date: parseInt(RegExp.$2)
|
||||||
|
});
|
||||||
|
that.listYM[0] = [dateTime.year, dateTime.month];
|
||||||
|
that.change(0).goToYear(dateTime.year);
|
||||||
|
that.setValue(that.parse(1, dateTime));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//自适应定位
|
||||||
lay(window).on('resize', function(){
|
lay(window).on('resize', function(){
|
||||||
if(!that.elem || !lay(ELEM)[0]){
|
if(!that.elem || !lay(ELEM)[0]){
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in New Issue