<template>
<div class="calender">
<div class="box">
<div class="year">
<div class="preMonth" @click="handlePrev">preMonth</div>
<div class="currentMonth">{{year}}-{{month}}</div>
<div class="nextMonth" @click="handleNext">nextMonth</div>
</div>
<ul class="day">
<li class="week" v-for="(item,index) in weekList" :key="index">{{item}}</li>
</ul>
<div class="days">
<div class="item" v-for="(item,index) in 42" :key="index">
<div class="lastMonth" v-if="item-beginDay<=0">{{prevMonthDays-beginDay+item}}</div>
<div
v-else-if="item-beginDay>currentMonthDays"
class="nextMonth"
>{{item-beginDay-currentMonthDays}}</div>
<div v-else :class="['currentMonth',{active:currentDay==item-beginDay}]">{{item-beginDay}}</div>
</div>
</div>
</div>
<div class="box">
<div class="year">
<div class="preMonth" @click="handlePrevWeek">preWeek</div>
<div class="currentMonth">{{todayDate}}</div>
<div class="nextMonth" @click="handleNextWeek">nextWeek</div>
</div>
<ul class="day">
<li class="week" v-for="(item,index) in weekList" :key="index">{{item}}</li>
</ul>
<div class="days">
<div class="item" v-for="(item,index) in weekDayArr" :key="index">
<span>{{item.adate}}</span>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
date: "",
year: null,
month: null,
day: null,
currentDay: null,
todayDate: null,
weekDayArr: [],
currentFirstDate: "",
clen: 7,
lastDayList: [],
dayList: [],
nextDayList: [],
weekList: [
"星期日",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六"
]
};
},
created() {
this.getMonth();
this.todayDate = this.formatDate(new Date());
this.setDate(new Date());
},
computed: {
currentMonthDays() {
// 某月有多少天
var currentDate = new Date(this.year, this.month, 0);
var days = currentDate.getDate();
return days;
},
prevMonthDays() {
// 上一个月共有多少天
return new Date(this.year, this.month - 1, 0).getDate();
},
beginDay() {
// 某月一号是星期几
return new Date(this.year, this.month - 1, 1).getDay();
}
},
mounted() {},
methods: {
getMonth() {
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
var week = date.getDay();
this.year = year;
this.month = month;
this.day = day;
this.week = week;
this.currentDay = day;
return (this.date = year + "-" + month + "-" + day);
},
// 日期格式处理
formatDate(date) {
var month = date.getMonth() + 1 + "月";
var day = date.getDate() + "日";
return month + day ;
},
addDate(date, n) {
date.setDate(date.getDate() + n);
return date;
},
setDate(date) {
var week = date.getDay();
date = this.addDate(date, week * -1);
this.currentFirstDate = new Date(date);
for (var i = 0; i < this.clen; i++) {
this.weekDayArr.push({
adate: this.formatDate(i == 0 ? date : this.addDate(date, 1))
});
}
},
handlePrev() {
if (this.month === 1) {
this.month = 12;
this.year--;
} else {
this.month--;
}
},
handleNext() {
if (this.month === 12) {
this.month = 1;
this.year++;
} else {
this.month++;
}
},
handlePrevWeek() {
this.weekDayArr=[]
this.setDate(this.addDate(this.currentFirstDate,-7));
},
handleNextWeek() {
this.weekDayArr=[]
this.setDate(this.addDate(this.currentFirstDate,7));
}
}
};
</script>
<style lang="scss" scoped>
@import "../../common/sass.scss";
@import "../../common/css/valender.scss";
.year {
background: green;
padding: pxToRem(10) 0;
font-size: 0;
}
.year > div {
font-size: pxToRem(16);
color: #333;
width: 30%;
display: inline-block;
}
.day {
width: pxToRem(700);
font-size: 0;
.week {
width: pxToRem(100);
display: inline-block;
font-size: pxToRem(16);
color: #333;
}
}
.days {
width: pxToRem(700);
font-size: 0;
.item {
width: pxToRem(100);
display: inline-block;
font-size: pxToRem(16);
color: #000;
.lastMonth {
color: #666;
}
.nextMonth {
color: #666;
}
.active {
color: red;
}
}
}
</style>
样式有点丑(主要写功能T_T)
