2016-10-10 2 views
1

Я использую реагировать-DateTime и хочу отключить кого от того, чтобы выбрать дату/время в прошлом, так как это будет отправлять электронные письма, которые не должен появляться, чтобы был отправлен в прошлом. Documentation показывает мне, как отключать даты раньше, но когда я пытался отключить минуты, его можно поменять вручную в раскрывающемся списке календаря. Код ниже является частью большой платформы электронной почты, но должен иметь смысл сделать некоторые фрагменты. Файл живет here, и вы также можете увидеть весь репо.React.js: отключить DateTime при изменении в прошлом

В идеале, если кто-то выбирает дату или время в одну минуту или больше в прошлом, он должен прыгать обратно в текущее время и только иметь возможность «отправить», если в настоящий момент. Любая помощь будет потрясающей - спасибо!

isValidDate(dt) { 
    return (dt >= (moment().startOf('day'))) 
     && (dt <= moment().add(30, 'days')) 
     && moment().subtract(1, 'minute'); 
    } 

Я уже пробовал выше, но все же давайте редактировать вручную :(

class EmailSendDialog extends Component { 
    constructor(props) { 
    super(props); 
    this.state = { 
     listId: null, 
     now: true, 
     date: moment(), 
     tz: this.defaultTz 
    }; 
    } 

    handleDateTimeSelect(date) { 
    this.setState({ date }); 
    } 

    isValidDate(dt) { 
    return (dt >= (moment().startOf('day'))) 
     && (dt <= moment().add(30, 'days')) 
     && moment().subtract(1, 'minute'); 
    } 

Оказывать, у меня есть это:

 <DateTime 
     value={date} 
     dateFormat="D MMM YYYY" 
     isValidDate={this.isValidDate} 
     onChange={(_date) => this.handleDateTimeSelect(_date)} 
     /> 

ответ

2

Cool - Я просто пойду вперед и ответить на мой вопрос;)

handleDateTimeSelect(date) { 
    if (date < moment()) { 
     date = moment(); 
    } 
    this.setState({ date }); 
    } 

Это задает момент, когда мы сейчас находимся, даже если вы попытаетесь вручную изменить его, он отскакивает назад.

Редакция
Чтобы уменьшить вычислительную нагрузку, я использовал ниже, в конце концов:

handleDateTimeSelect(date) { 
    const currentDate = moment(); 
    date = date < currentDate ? currentDate : date; 
    this.setState({ date }); 
    } 
Смежные вопросы