年季度月周日控件html和javascript,基于element UI按年、季度、年月、年月日的日历插件给一个完整案例,不要用vue写
时间: 2024-01-24 07:04:47 浏览: 77
好的,以下是一个基于Element UI的年、季度、年月、年月日的日历插件的完整案例,使用HTML和JavaScript编写。
首先,我们需要引入Element UI和相关的CSS和JavaScript文件:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Calendar Demo</title>
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
</head>
<body>
<div id="app">
<el-date-picker v-model="selectedDate" type="date" :picker-options="pickerOptions"></el-date-picker>
</div>
<script>
var app = new Vue({
el: '#app',
data: {
selectedDate: null,
pickerOptions: {
disabledDate: function (date) {
if (!this.selectedDate) {
return false;
}
var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
var selectedYear = this.selectedDate.getFullYear();
var selectedMonth = this.selectedDate.getMonth() + 1;
var selectedDay = this.selectedDate.getDate();
switch (this.selectedType) {
case 'year':
return year !== selectedYear;
case 'quarter':
return year !== selectedYear || Math.floor((month - 1) / 3) !== Math.floor((selectedMonth - 1) / 3);
case 'month':
return year !== selectedYear || month !== selectedMonth;
case 'date':
return year !== selectedYear || month !== selectedMonth || day !== selectedDay;
default:
return false;
}
},
shortcuts: [
{
text: 'This Year',
onClick: function (picker) {
var year = new Date().getFullYear();
var startDate = new Date(year, 0, 1);
var endDate = new Date(year, 11, 31);
picker.$emit('pick', [startDate, endDate]);
}
},
{
text: 'This Quarter',
onClick: function (picker) {
var startDate = new Date();
var month = startDate.getMonth();
var quarterStartMonth = month - month % 3;
startDate.setMonth(quarterStartMonth);
startDate.setDate(1);
var endDate = new Date(startDate);
endDate.setMonth(quarterStartMonth + 2);
endDate.setDate(getDaysInMonth(endDate.getFullYear(), endDate.getMonth()));
picker.$emit('pick', [startDate, endDate]);
}
},
{
text: 'This Month',
onClick: function (picker) {
var year = new Date().getFullYear();
var month = new Date().getMonth();
var startDate = new Date(year, month, 1);
var endDate = new Date(year, month, getDaysInMonth(year, month));
picker.$emit('pick', [startDate, endDate]);
}
},
{
text: 'This Week',
onClick: function (picker) {
var startDate = new Date();
var day = startDate.getDay();
var diff = day === 0 ? -6 : 1 - day;
startDate.setDate(startDate.getDate() + diff);
var endDate = new Date(startDate);
endDate.setDate(startDate.getDate() + 6);
picker.$emit('pick', [startDate, endDate]);
}
},
{
text: 'Yesterday',
onClick: function (picker) {
var yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
picker.$emit('pick', yesterday);
}
},
{
text: 'Today',
onClick: function (picker) {
picker.$emit('pick', new Date());
}
},
{
text: 'Last Week',
onClick: function (picker) {
var startDate = new Date();
var day = startDate.getDay();
var diff = day === 0 ? -13 : 7 - day;
startDate.setDate(startDate.getDate() + diff);
var endDate = new Date(startDate);
endDate.setDate(startDate.getDate() + 6);
picker.$emit('pick', [startDate, endDate]);
}
},
{
text: 'Last Month',
onClick: function (picker) {
var year = new Date().getFullYear();
var month = new Date().getMonth() - 1;
if (month < 0) {
year--;
month = 11;
}
var startDate = new Date(year, month, 1);
var endDate = new Date(year, month, getDaysInMonth(year, month));
picker.$emit('pick', [startDate, endDate]);
}
},
{
text: 'Last Quarter',
onClick: function (picker) {
var startDate = new Date();
var month = startDate.getMonth() - 3;
if (month < 0) {
month += 12;
startDate.setFullYear(startDate.getFullYear() - 1);
}
var quarterStartMonth = month - month % 3;
startDate.setMonth(quarterStartMonth);
startDate.setDate(1);
var endDate = new Date(startDate);
endDate.setMonth(quarterStartMonth + 2);
endDate.setDate(getDaysInMonth(endDate.getFullYear(), endDate.getMonth()));
picker.$emit('pick', [startDate, endDate]);
}
},
{
text: 'Last Year',
onClick: function (picker) {
var year = new Date().getFullYear() - 1;
var startDate = new Date(year, 0, 1);
var endDate = new Date(year, 11, 31);
picker.$emit('pick', [startDate, endDate]);
}
},
]
}
},
computed: {
selectedType: function () {
if (!this.selectedDate) {
return '';
}
return this.selectedDate.getDate() === 1 ? (this.selectedDate.getMonth() === 0 ? 'year' : 'quarter') : 'date';
}
}
});
function getDaysInMonth(year, month) {
return new Date(year, month + 1, 0).getDate();
}
</script>
</body>
</html>
```
在这个案例中,我们使用了一个Vue实例,其中包含一个`selectedDate`属性和一个`pickerOptions`属性。`selectedDate`表示用户选择的日期,`pickerOptions`包含了一些配置选项,如`disabledDate`、`shortcuts`等。
`disabledDate`函数用于禁用不合法的日期。它接收一个`date`参数,表示要检查的日期,返回`true`表示禁用该日期,返回`false`表示启用该日期。在这个函数中,我们根据用户选择的日期和当前选择的类型来判断是否禁用该日期。
`shortcuts`数组包含了一些快捷选项,用户可以通过点击这些选项快速选择日期范围。每个选项都包含一个`text`属性和一个`onClick`函数。`text`表示选项的文本,`onClick`函数表示用户点击该选项时的回调函数。
在Vue实例中,我们还使用了一个计算属性`selectedType`,它用于根据用户选择的日期判断当前选择的类型,可能的值为`year`、`quarter`、`month`和`date`。
最后,我们定义了一个`getDaysInMonth`函数,用于获取指定月份的天数。
这个案例中并没有使用Vue的模板语法,而是直接在HTML中创建了一个`<div>`元素,并使用JavaScript将其挂载到Vue实例上。这种方式适用于一些简单的页面,但对于复杂的交互逻辑,建议使用Vue的模板语法。
阅读全文