Ant Design Vue教程

Ant Design Vue DatePicker选择开始日期和结束日期(日期范围选择)

我们开发系统时可能会遇到这些场景比如酒店入住日期和退房日期、机票往返日期选择、出差开始日期和结束日期等等这些场景可以通过DatePicker的RangePicker组件实现。

RangePicker组件实现

以下代码演示了常用日期范围及不可选日期,最少选择5天(比如预定房间天数必须大于等于5天)

<template>
  <div>
    <a-locale-provider :locale="locale">
      <a-range-picker
        @change="onChange"
        @calendarChange="calendarChange"
        :ranges="ranges"
        :disabledDate="disabledDate"
      />
    </a-locale-provider>
  </div>
</template>
<script>
import zhCN from "ant-design-vue/lib/locale-provider/zh_CN";
import moment from "moment";
export default {
  data() {
    return {
      selectDate: null,
      //中文本地化
      locale: zhCN,
      //预设常用日期范围快捷方式
      ranges: {
        一月内: () => [
          moment("2020-10-10", "YYYY:MM:DD"),
          moment("2020-11-10", "YYYY:MM:DD")
        ],
        昨天: () => [
          moment()
            .startOf("day")
            .subtract(1, "days"),
          moment()
            .endOf("day")
            .subtract(1, "days")
        ],
        最近一周: () => [
          moment()
            .startOf("day")
            .subtract(1, "weeks"),
          moment()
        ]
      }
    };
  },
  methods: {
    moment,
    //不可选日期
    disabledDate(current) {
      if (this.selectDate != null) {
        return current < this.selectDate;
      } else {
        return current < moment().endOf("day");
      }
    },
    //选中日期事件
    calendarChange(date, dateString) {
      if (date.length <= 1) {
        //选中开始日期事件,设置结束日期必须大于5天
        this.selectDate = date[0].add(5, "days");
      } else {
        this.selectDate = null;
      }
    },
    //选择后的事件
    onChange(date, dateString) {
      console.log(date, dateString);
    }
  }
};
</script>

以上代码为node.js webpack开发方式,如果你是使用cdn引入js方式开发请点击在线试一试查看代码。

在线试一试

浏览器引入js方式

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>Ant Design Vue range-picker日期范围选择例子</title>
    <script src="https://www.itxst.com/package/ant-design-vue/moment.js"></script>
    <script src="https://www.itxst.com/package/vue/vue.min.js"></script>
    <script src="https://www.itxst.com/package/ant-design-vue/antd.js"></script>
    <link href="https://www.itxst.com/package/ant-design-vue/antd.min.css" rel="stylesheet" />
    <script src="https://www.itxst.com/package/ant-design-vue/antd-with-locales.js"></script>
    <style>
        body {
            padding-top: 10px
        }
    </style>
</head>
<body>
    <div id="app">
        <div :style="{  paddingBottom:'10px' }">
            <a-locale-provider :locale="locales.zh_CN">
                <a-range-picker @change="onChange" :ranges="ranges"></a-range-picker>
            </a-locale-provider>
        </div>
    </div>
    <script>
        const { LocaleProvider, locales } = window.antd;
        var app = new Vue({
            el: '#app',
            data() {
                return {
                    locales,
                    ranges: {
                        '一月内': () => [moment('2020-10-10', 'YYYY:MM:DD'), moment('2020-11-10', 'YYYY:MM:DD')],
                        '昨天': () => [moment().startOf('day').subtract(1, 'days'), moment().endOf('day').subtract(1, 'days')],
                        '最近一周': () => [moment().startOf('day').subtract(1, 'weeks'), moment()]
                    },
                };
            },
            methods: {
                moment,
                onChange(date, dateString) {
                    console.log(date, dateString);
                }
            },
            created: function () {
                // 里面的字符可以根据自己的需要进行调整
                moment.locale('zh-cn', {
                    months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
                    monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
                    weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
                    weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),
                    weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
                    longDateFormat: {
                        LT: 'HH:mm',
                        LTS: 'HH:mm:ss',
                        L: 'YYYY-MM-DD',
                        LL: 'YYYY年MM月DD日',
                        LLL: 'YYYY年MM月DD日Ah点mm分',
                        LLLL: 'YYYY年MM月DD日ddddAh点mm分',
                        l: 'YYYY-M-D',
                        ll: 'YYYY年M月D日',
                        lll: 'YYYY年M月D日 HH:mm',
                        llll: 'YYYY年M月D日dddd HH:mm'
                    },
                    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
                    meridiemHour: function (hour, meridiem) {
                        if (hour === 12) {
                            hour = 0;
                        }
                        if (meridiem === '凌晨' || meridiem === '早上' ||
                            meridiem === '上午') {
                            return hour;
                        } else if (meridiem === '下午' || meridiem === '晚上') {
                            return hour + 12;
                        } else {
                            // '中午'
                            return hour >= 11 ? hour : hour + 12;
                        }
                    },
                    meridiem: function (hour, minute, isLower) {
                        const hm = hour * 100 + minute;
                        if (hm < 600) {
                            return '凌晨';
                        } else if (hm < 900) {
                            return '早上';
                        } else if (hm < 1130) {
                            return '上午';
                        } else if (hm < 1230) {
                            return '中午';
                        } else if (hm < 1800) {
                            return '下午';
                        } else {
                            return '晚上';
                        }
                    },
                    calendar: {
                        sameDay: '[今天]LT',
                        nextDay: '[明天]LT',
                        nextWeek: '[下]ddddLT',
                        lastDay: '[昨天]LT',
                        lastWeek: '[上]ddddLT',
                        sameElse: 'L'
                    },
                    dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/,
                    ordinal: function (number, period) {
                        switch (period) {
                            case 'd':
                            case 'D':
                            case 'DDD':
                                return number + '日';
                            case 'M':
                                return number + '月';
                            case 'w':
                            case 'W':
                                return number + '周';
                            default:
                                return number;
                        }
                    },
                    relativeTime: {
                        future: '%s内',
                        past: '%s前',
                        s: '几秒',
                        ss: '%d秒',
                        m: '1分钟',
                        mm: '%d分钟',
                        h: '1小时',
                        hh: '%d小时',
                        d: '1天',
                        dd: '%d天',
                        M: '1个月',
                        MM: '%d个月',
                        y: '1年',
                        yy: '%d年'
                    },
                    week: {
                        // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
                        dow: 1, // Monday is the first day of the week.
                        doy: 4  // The week that contains Jan 4th is the first week of the year.
                    }
                })
            },
        });
    </script>
</body>
</html>
Catalog
快速入门 Dropdown 下拉菜单 Menu 导航菜单 Pagination 分页 Steps 步骤条 AutoComplete 自动填充 Cascader 级联选择 Checkbox 多选框 DatePicker 日期选择框 DatePicker 日期选择框用法 DatePicker 设置不可选日期 DatePicker 选择时间 DatePicker 设置日期格式 DatePicker 日期范围选择 DatePicker 定制日期单元格 DatePicker 自定义渲染 DatePicker 属性和事件 Input 输入框 InputNumber 数字输入框 Mentions 提及 Radio 单选框 Rate 评分组件 Select 下拉框 Slider 滑动输入条 Switch 开关