import React from 'react'; import Calendar from 'rc-calendar'; import MonthCalendar from 'rc-calendar/lib/MonthCalendar'; import Datepicker from 'rc-calendar/lib/Picker'; import GregorianCalendar from 'gregorian-calendar'; import zhCn from 'gregorian-calendar/lib/locale/zh-cn'; import CalendarLocale from 'rc-calendar/lib/locale/zh-cn'; import DateTimeFormat from 'gregorian-calendar-format'; // 和顶部文案保持一致 import Locale from 'gregorian-calendar-format/lib/locale/zh-cn'; Locale.shortMonths = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']; function createPicker(TheCalendar) { return React.createClass({ getInitialState() { let value; if (this.props.value) { value = new GregorianCalendar(zhCn); value.setTime(new Date(this.props.value).valueOf()); } return { value: value }; }, componentWillReceiveProps(nextProps) { if ('value' in nextProps) { let value = null; if (nextProps.value) { value = new GregorianCalendar(zhCn); value.setTime(new Date(nextProps.value).valueOf()); } this.setState({ value: value }); } }, getFormatter() { let formats = this.formats = this.formats || {}; const format = this.props.format; if (formats[format]) { return formats[format]; } formats[format] = new DateTimeFormat(format); return formats[format]; }, getDefaultProps() { return { format: 'yyyy-MM-dd', placeholder: '请选择日期', transitionName: 'slide-up', onSelect: null, //向前兼容 calendarStyle: {}, onChange() { } //onChange可用于Validator }; }, handleChange(v) { this.setState({ value: v }); let timeValue = null; if (v) { timeValue = new Date(v.getTime()); } //onSelect为向前兼容. if (this.props.onSelect) { require('util-deprecate')(this.props.onSelect, 'onSelect property of Datepicker is deprecated, use onChange instead')(timeValue); } this.props.onChange(timeValue); }, render() { let calendar = ( ); let sizeClass = ''; if (this.props.size === 'large') { sizeClass = ' ant-input-lg'; } else if (this.props.size === 'small') { sizeClass = ' ant-input-sm'; } let defaultValue; if (this.props.defaultValue) { defaultValue = new GregorianCalendar(zhCn); defaultValue.setTime(new Date(this.props.defaultValue).valueOf()); } return ( { ({value}) => { return ([, ]); } } ); } }); } const AntDatePicker = createPicker(Calendar); const AntMonthPicker = createPicker(MonthCalendar); const AntCalendar = React.createClass({ getDefaultProps() { return { locale: CalendarLocale, prefixCls: 'ant-calendar', }; }, render() { return ; } }); AntDatePicker.Calendar = AntCalendar; AntDatePicker.MonthPicker = AntMonthPicker; export default AntDatePicker;