2017-09-25 2 views
0

Ich benutze DatePicker von antd.antd DatePicker: Minuten nur für die angegebene Stunde deaktivieren

<LocaleProvider locale={enUS}> 
    <DatePicker 
     format="MM/D/YYYY HH:mm" 
     defaultValue={this.getStartValue()} 
     showTime={{format: 'HH:mm'}} 
     placeholder="Start" 
     allowClear={false} 
     onOk={this.onStartTimeChange} 
    /> 
</LocaleProvider> 
<LocaleProvider locale={enUS}> 
    <DatePicker 
     format="MM/DD/YYYY HH:mm" 
     defaultValue={this.getEndValue()} 
     showTime={{format: 'HH:mm'}} 
     placeholder="End" 
     allowClear={false} 
     onOk={this.onEndTimeChange} 
    /> 
</LocaleProvider> 

Voraussetzung hier ist:

  • Für startdate, Daten über das Enddatum deaktiviert werden soll, auch Zeit, über die Endzeit deaktiviert werden soll.

Ich habe Deaktivierungsdatum mit disabledDate erreicht.

Jetzt für die Zeit Ich versuche disabledTime Requisiten, aber ich bin nicht in der Lage auf zu verstehen, wie Minuten deaktivieren nur für bestimmte Stunde

Zum Beispiel Wenn Endzeit: 18.34 Dann wird alle Zeit von 00:00 bis 18:33 sollte aktiviert sein und alle Zeiten von 18:34 - 23:59 Uhr sollten deaktiviert sein.

==============================

getDateTime(value) { 
    const dateTime = {}; 
    dateTime.date = value.format('MM/DD/YYYY'); 
    dateTime.hour = value.hour(); 
    dateTime.minute = value.minute(); 
    return dateTime; 
} 

getDisplayTime(dateTime) { 
    const date = dateTime.date; 
    const hour = dateTime.hour; 
    const minute = dateTime.minute; 
    const timeStr = `${date} ${hour}:${minute}`; 
    return moment(timeStr, 'MM/DD/YYYY HH:mm'); 
} 

onStartTimeChange(value) { 
    if (value) { 
     this.props.updateStartTime(this.getDateTime(value)); 
    } 
} 

onEndTimeChange(value) { 
    if (value) { 
     this.props.updateEndTime(this.getDateTime(value)); 
    } 
} 

getStartValue() { 
    return this.getDisplayTime(this.props.startTime); 
} 

getEndValue() { 
    return this.getDisplayTime(this.props.endTime); 
} 

disabledStartDate(current) { 
    // Can not select days after end date 
    const endDate = this.getEndValue(); 
    return current && endDate && current.valueOf() > endDate.valueOf(); 
} 

range(start, end) { 
    const result = []; 
    for (let i = start; i < end; i++) { 
     result.push(i); 
    } 
    return result; 
} 

disabledStartDateTime(current) { 
    const endDate = this.getEndValue(); 
    if (current && endDate && current.valueOf() !== endDate.valueOf()) { 
     return {}; 
    } 
    const hour = current.hour(); 
    const minute = current.minute(); 
    return { 
     disabledHours:() => { 
      if (hour < 23) { 
       let start = hour; 
       if (minute !== 0) { 
        start += 1; 
       } 
       return this.range(start, 24); 
      } 
      return []; 
     }, 
     disabledMinutes:() => { 
      if (current.hour() === hour) { 
       return this.range(minute, 60); 
      } 
      return []; 
     } 
    }; 
} 

<LocaleProvider locale={enUS}> 
    <DatePicker 
     format='MM/DD/YYYY HH:mm' 
     defaultValue={this.getStartValue()} 
     showTime={{format: 'HH:mm'}} 
     allowClear={false} 
     showToday={false} 
     disabledDate={this.disabledStartDate} 
     disabledTime={this.disabledFromDateTime} 
     hideDisabledOptions={true} 
     onChange={this.onStartTimeChange} 
    /> 
</LocaleProvider> 

<LocaleProvider locale={enUS}> 
    <DatePicker 
     format='MM/DD/YYYY HH:mm' 
     defaultValue={this.getEndValue()} 
     showTime={{format: 'HH:mm'}} 
     allowClear={false} 
     showToday={false} 
     hideDisabledOptions={true} 
     onChange={this.onEndTimeChange} 
    /> 
</LocaleProvider> 

========= =====================

Antwort

0

<DatePicker ... showTime={{ format: "...", disabledMinutes: this.disabledMinutes}} />

Und dann

disabledMinutes = (hour) => { 
    let minutes = [] 
    // Check which minutes 0..59 should be disabled during this hour 
    // and push each minute to the minutes array. 
    return minutes 
} 
+0

Dies funktioniert nicht. Grundsätzlich OK-Schaltfläche wird deaktiviert, aber ich verwende bei Änderung und diese Werte werden als auswählbar angezeigt (und OnChange wird ausgelöst), sobald der Benutzer irgendwo in der Zeit klicken. Ich benötige Änderungen, damit ich Fälle bearbeiten kann, in denen der Benutzer das Eingabefeld manuell bearbeitet. – learner

+0

Zeigen Sie Ihren Code, sonst ist es schwer weiter zu helfen. Was ich oben gepostet habe, hat nichts mit OK zu tun. –

+0

Ich habe meinen Code in der Frage aktualisiert – learner

Verwandte Themen