如果它确实必须始终保持一个日期时间字符串的状态,那么沿着这些思路的东西应该可以工作(即采用先前设置的状态字符串,转换为moment 对象,仅修改相关部分,然后应用回来再次声明为字符串)
format = 'YYYY-MM-DDThh:mm:ss'
selectDate = (event, date) => this.setState( d => prevState => ({
datetimeStr: (moment(prevState.datetimeStr, this.format) || d)
.year(d.year()).month(d.month()).date(d.date())
.format(this.format)
})(moment(date)))
selectTime = (event, time) => this.setState( d => prevState => ({
datetimeStr: (moment(prevState.datetimeStr, this.format) || d)
.hour(d.hour()).minutes(d.minutes())
.format(this.format)
})(moment(time)))
但是,如果它们都作为实际的 Date 对象以状态存储并且仅在需要时在某些输出中作为字符串组合/格式化,那么如果需要在不同的地方进行不同的格式化,您仍然可以派生它,这样会更加灵活来自同一个州
selectDate = (event, date) => this.setState({date})
selectTime = (event, time) => this.setState({time})
getSelectedDatetimeStr = () => {
const date = moment(this.state.date || {})
const time = moment(this.state.time || {})
return moment({
year: date.year(),
month: date.month(),
day: date.date(),
hours: time.hours(),
minute: time.minutes()
}).format('YYYY-MM-DDThh:mm:ss')
}