vue制作日历
作者:互联网
<template>
<div class="calender">
<div class="calender_title">
<div class="arrow arrow-left" @click="prev()"><</div>
<div class="data">{{ currentYear }}-{{ currentMonthChinese }}</div>
<div class="arrow arrow-right" @click="next()">></div>
</div>
<div class="calender_content">
<div class="row title">
<span v-for="item in title" :key="item">{{ item }}</span>
</div>
<div class="row content">
<span class="prevDay" v-for="item in prevDays" :key="'A' + item">{{ item }}</span>
<span v-for="item in currentDays" :key="'B' + item">{{ item }}</span>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
title: ["日", "一", "二", "三", "四", "五", "六"],
currentDay: new Date().getDate(),
currentMonth: new Date().getMonth(),
currentYear: new Date().getFullYear(),
};
},
computed: {
// 获取中文的月份 显示:8月
currentMonthChinese() {
return new Date(this.currentYear, this.currentMonth).toLocaleString(
"default",
{ month: "short" }
);
},
currentDays() {
// Date中的月份是从0开始的
return new Date(this.currentYear, this.currentMonth + 1, 0).getDate();
},
prevDays() {
// 获取上个月的最后一行的日期
let data = new Date(this.currentYear,this.currentMonth,0).getDate();
let num = new Date(this.currentYear, this.currentMonth, 1).getDay();
var days = [];
while(num>0){
days.push(data--);
num--;
}
// return new Date(this.currentYear, this.currentMonth, 1).getDay();
// 排序
return days.sort();
},
},
methods: {
prev(){
// 点击上个月,若是0月则年份-1
// 0是1月 11是12月
if(this.currentMonth == 0){
this.currentYear -= 1;
this.currentMonth = 11;
}else{
this.currentMonth--;
}
},
next(){
if(this.currentMonth == 11){
this.currentYear++;
this.currentMonth = 0;
}else{
this.currentMonth++;
}
}
},
};
</script>
<style lang="less">
.calender {
width: 300px;
height: 300px;
margin: 0 auto;
.calender_title {
display: flex;
width: 100%;
height: 40px;
line-height: 40px;
text-align: center;
.arrow {
width: 50px;
height: 100%;
}
.data {
font-size: 20px;
}
}
.calender_content {
width: 100%;
height: 250px;
.row {
width: 100%;
display: flex;
justify-content: space-between;
}
.title {
height: 40px;
line-height: 40px;
span {
width: calc(100% / 7);
text-align: center;
}
}
.content {
-webkit-box-pack: start;
-ms-flex-pack: start;
justify-content: flex-start;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
span {
width: calc(100% / 7);
height: 30px;
line-height: 30px;
text-align: center;
}
.prevDay{
color: #fff;
background-color: #eee;
}
}
}
}
</style>
展示页面
标签:vue,日历,currentYear,width,currentMonth,Date,new,height,制作 来源: https://www.cnblogs.com/Huang-J/p/16695015.html