id="showMonth" @click.stop="showMonth()" :class="monthShow == true ? 'dateBox true' : 'dateBox'" { { Firmonth + 1 }}月</label <label style="width: 20px">至</label> <label v-show="arr.length == 0" style="cursor: pointer; color: rgb(168, 168, 168)" >结束月份</label <label v-show="arr.length != 0" style="cursor: pointer" >{ { Sedmonth + 1 }}月</label <!-- 月份选择器 --> id="monthBox" v-show="monthShow" class="monthShow fadein" <!-- 月份区间选择 --> <div class="months"> class="out" v-for="(m, index) of months" :key="m.id" :class="{ 'start-data': index === Firmonth, 'end-data': index === Sedmonth, 'start-month': index === Startmonth, 'other-month': index !== Firmonth && index !== Sedmonth, :style=" index > Math.min.apply(null, arr) && index < Math.max.apply(null, arr) ? outSelect @click="getMonth(index)" :class="index === Firmonth || index === Sedmonth ? 'active' : ''" :style=" index > Math.min.apply(null, arr) && index < Math.max.apply(null, arr) ? select { { m }} </template>

以下是主要逻辑代码

<script>
export default {
  data() {
    return {
      count: 0,
      monthShow: false,//控制月份选择盒子显示隐藏
      year: "",
      Firmonth: "",
      Sedmonth: "",
      Startmonth: "",
      month: "",
      months: [
        "一月",
        "二月",
        "三月",
        "四月",
        "五月",
        "六月",
        "七月",
        "八月",
        "九月",
        "十月",
        "十一月",
        "十二月",
      arr: [],
      select: {
        color: "black",
      outSelect: {
        color: "black",
        backgroundColor: "#f2f6fc",
  created(){
    document.addEventListener("click",e =>{
      let box = document.getElementById("monthBox");
      if(box.contains(e.target)){
        console.log(this);
        console.log("内");
      }else{
        this.monthShow = false;
        console.log("外");
  methods: {
    showMonth() {
      this.monthShow = !this.monthShow;
    getMonth(index) {
      let _this = this;
// 通过数组push 检索inde 来判断 是否为第一个选择的月份
      if (_this.arr.length < 2) {
        _this.arr.push(index);
        _this.Firmonth = Math.min.apply(null, _this.arr);
        _this.Sedmonth = Math.max.apply(null, _this.arr);
      } else {
        _this.Firmonth = index;
        _this.Sedmonth = index;
        _this.arr = [];
        _this.arr.push(index);
        console.log(_this.arr);
    // 获取当前日期
    getInitTime() {
      let date = new Date();
      this.Startmonth = date.getMonth(); //获取本月
  mounted() {
    this.getInitTime();
</script>
                                    实际项目中,在用户的个人中心,编辑用户资料时经常会遇到选择生日选项的问题。
因为我项目工程中没有使用如jQuery UI的插件性下拉列表,所以选择select + option的原生方式,实现选择器。
能够准确计算闰年的年月日,方便表单处理。
实际效果如下图,式样略粗糙
生日中的年月日以下拉方式,我们给每个select加个rel的属性,当已知用户生日时,直接通过rel属
                                    element el-date-picker 还没有 type="months" 可以选择多个月份的功能。现在若想选则多个月份,可直接使用element。本文仅对之前写的月份组件做个记录。一、直接使用el-date-picker  type="months"1、新建组件  SelectMonths.vue。2、使用组件  SelectMonths。
                                    vue月份选择 选月 (vue-month-picker)
A lightweight month picker for Vue.js with no dependencies.
 Vue.js的轻量级月份选择器,没有依赖项。 
View demo
查看演示 View Github 
查看Github 
 安装 (Install)
npm install --save vue-...