return (
<div>
<div>
<TimePicker
format={'HH:mm'}
placeholder=''
className="am-ml-10"
value={text[0] ? moment(text[0], 'HH:mm') : ''}
disabledHours={(e) => this.getDisabledHours(e, index, 'startTime')}
disabledMinutes={(e) => this.getDisabledMinutes(e, index, 'startTime')}
onChange={(e) => this.handleChangeTime(e, index,'startTime')}
style={{ width: '110px' }} />
<span style={{margin: '0 5px'}}>to</span>
<TimePicker
format={'HH:mm'}
placeholder=''
className="am-ml-10"
disabledHours={(e) => this.getDisabledHours(e, index, 'endTime')}
disabledMinutes={(e) => this.getDisabledMinutes(e, index, 'endTime')}
value={text[1] ? moment(text[1], 'HH:mm') : ''}
onChange={(e) => this.handleChangeTime(e, index,'endTime')}
style={{ width: '110px' }} />
</div>
{(!text[0] || !text[1]) && record.dataType == 'comfirm' && (
<div className="txt-danger">Session is required</div>
)}
</div>
);
//更改时间
handleChangeTime = (time, index, type) => {
this.bindListener()
let splitTime = this.getValue(time,'time')
let value = splitTime? splitTime.split(':') :''
let timeArrStart = this.timeStartComputer(index)
let timeArrEnd = this.timeEndComputer(index)
let dataTime = this.dealTimeData('', index, type)
const { columnData } = this.state;
if(type == 'startTime') {
columnData[index].timeStart[0] = splitTime
if( timeArrEnd[1] <= value[1]) {
dataTime = this.range(Number(timeArrEnd[0]), 24)
}
}else{
columnData[index].timeStart[1] = splitTime
if( timeArrStart[1] >= value[1]) {
dataTime = this.range(0, Number(timeArrStart[0]))
}
}
this.setState({
columnData,
disabledHourValue: dataTime
})
}
getDisabledHours = () => {
return this.state.disabledHourValue
}
range = (start, end) => {
const result = [];
if (start > end) return []
for (let i = start; i <= end; i++) {
result.push(i);
}
return result;
};
//時間計算
timeStartComputer = (index) => {
const { columnData } = this.state;
let timeStart = columnData[index].timeStart[0]
let timeArrStart = timeStart? timeStart.split(':') :''
return timeArrStart
}
timeEndComputer = (index) => {
const { columnData } = this.state;
let timeEnd = columnData[index].timeStart[1]
let timeArrEnd = timeEnd ? timeEnd.split(':') : ''
return timeArrEnd
}
//开始时间不能大于结束时间
dealTimeData = (value, index, type) => {
let timeArrStart = this.timeStartComputer(index)
let timeArrEnd = this.timeEndComputer(index)
if( type == 'startTime'){
return this.range(Number(timeArrEnd[0])+1, 24)
}
if( type == 'endTime' ) {
return this.range(0, Number(timeArrStart[0]-1))
}
}
getDisabledMinutes = ( value, index, type ) => {
let timeArrStart = this.timeStartComputer(index)
let timeArrEnd = this.timeEndComputer(index)
if( type == 'startTime'){
if(value && value == timeArrEnd[0] ) {
return this.range(Number(timeArrEnd[1]), 60)
}
return []
}
if( type == 'endTime' ) {
if(value && value == timeArrStart[0] ) {
return this.range(0, Number(timeArrStart[1]))
}
return []
}
}
//开始日期不能大于结束日期
disabledDate = (current, index, type) => {
const { columnData } = this.state;
if( type == 'startDay') {
if( columnData[index].effectiveTimeAll[1] ) {
return current && current >= moment(columnData[index].effectiveTimeAll[1]).add(1, 'days').startOf('day');
}
}
if ( type == 'endDay') {
if( columnData[index].effectiveTimeAll[0] ) {
return current && current < moment(columnData[index].effectiveTimeAll[0]).subtract(1, 'days').endOf('day');
}
}
}
、获取日期的23时59分59秒
//今天的
moment().endOf(‘day’)
//指定日期的
moment(‘2020-06-25’).endOf(‘day’)
2、获取日期的0时0分0秒
//今天的,跟上面的endOf一样的
moment().startOf(‘day’)
3、获取时间戳
moment().endOf(‘day’).valueOf()
4、时间戳转日期
moment(val).format(“YYYY-MM-DD HH:mm:ss”)
5、获取当前时间前 X 天
moment().subtract(1, “days”).format(“YYYY-MM-DD HH:mm:ss”); //1就是前1天,2就是前两天
1
6、获取当前时间前 X 周
moment().subtract(1, “weeks”).format(“YYYY-MM-DD”);//月把weeks改成months
1
可以取的值
years
quarters
months
weeks
days
hours
minutes
seconds
milliseconds
精进版
//时间格式化
getValue = (val,type) => {
if(type == 'date') {
if (val) {
return moment(val)
}
return null
}else {
if (val) {
return moment(val).format("HH:mm")
}
return null
}
}
getDateParams = (val) => {
if (val) {
return moment(val).format("YYYY-MM-DD")
}
return null
}
getDate = (val) => {
if (val) {
return moment(val).format("DD-MMM-YYYY")
}
return null
}
range = (start, end) => {
const result = [];
if (start > end) return []
for (let i = start; i <= end; i++) {
result.push(i);
}
return result;
};
//時間計算
timeStartComputer = (index) => {
const { columnData } = this.state;
let timeStart = columnData[index].timeStart[0]
let timeArrStart = timeStart? timeStart.split(':') :''
return timeArrStart
}
timeEndComputer = (index) => {
const { columnData } = this.state;
let timeEnd = columnData[index].timeStart[1]
let timeArrEnd = timeEnd ? timeEnd.split(':') : ''
return timeArrEnd
}
//开始时间不能大于结束时间
getDisabledHours = (value, index, type) => {
let timeArrStart = this.timeStartComputer(index)
let timeArrEnd = this.timeEndComputer(index)
if( type == 'startTime'){
if( timeArrEnd[1] <= timeArrStart[1]) {
return this.range(Number(timeArrEnd[0]), 24)
}
return this.range(Number(timeArrEnd[0])+1, 24)
}
if( type == 'endTime' ) {
if( timeArrStart[1] >= timeArrEnd[1] ) {
return this.range(0, Number(timeArrStart[0]))
}
return this.range(0, Number(timeArrStart[0]-1))
}
}
changeContainer = (value) =>{
let timeArrEnd = value ? value.split(':') : ''
return timeArrEnd
}
//更改时间
handleChangeTime = (time, index, type) => {
this.bindListener()
let temp = this.getValue(time,'time');
let a = this.changeContainer(temp)
const { columnData } = this.state;
if(type == 'startTime') {
let b = this.changeContainer(columnData[index].timeStart[1])
if(a[0] == b[0]){
if(a[1] >= b[1]){
let start = moment().format('YYYY-MM-DD')+' ' +columnData[index].timeStart[1]
columnData[index].timeStart[0] = moment(start).subtract(1, "minutes").format("HH:mm");
}else{
columnData[index].timeStart[0] = temp
}
}else if(a[1]){
if(a[1] >= b[1]) {
if(a[0] > b[0]){
let hourlowEnd = moment().format('YYYY-MM-DD')+' ' + b[0]+":"+ a[1]
columnData[index].timeStart[0] = moment(hourlowEnd).subtract(1, "hour").format("HH:mm");
}else{
columnData[index].timeStart[0] = temp
}
}else{
if(a[0] > b[0]){
let hourhighEnd = moment().format('YYYY-MM-DD')+' ' + b[0]+":"+ a[1]
columnData[index].timeStart[0] = moment(hourhighEnd).format("HH:mm");
}else{
columnData[index].timeStart[0] = temp
}
}
}else{
columnData[index].timeStart[0] = temp
}
}else{
let c = this.changeContainer(columnData[index].timeStart[0])
if(a[0] == c[0]){
if(c[1] >= a[1]){
let end = moment().format('YYYY-MM-DD')+' ' +columnData[index].timeStart[0]
columnData[index].timeStart[1] = moment(end).add(1, "minutes").format("HH:mm");
}else{
columnData[index].timeStart[1] = temp
}
} else if(a[1]) {
if(a[1] > c[1]) {
if(a[0] < c[0]){
let hourlowEnd = moment().format('YYYY-MM-DD')+' ' + c[0]+":"+ a[1]
columnData[index].timeStart[1] = moment(hourlowEnd).format("HH:mm");
}else{
columnData[index].timeStart[1] = temp
}
}else{
if(a[0] <= c[0]){
let hourhighEnd = moment().format('YYYY-MM-DD')+' ' + c[0]+":"+ a[1]
columnData[index].timeStart[1] = moment(hourhighEnd).add(1, "hour").format("HH:mm");
}else{
columnData[index].timeStart[1] = temp
}
}
}else{
columnData[index].timeStart[1] = temp
}
}
this.setState({
columnData
})
}
getDisabledMinutes = ( value, index, type ) => {
let timeArrStart = this.timeStartComputer(index)
let timeArrEnd = this.timeEndComputer(index)
if( type == 'startTime'){
if(value && value == timeArrEnd[0] ) {
return this.range(Number(timeArrEnd[1]), 60)
}
return []
}
if( type == 'endTime' ) {
if(value && value == timeArrStart[0] ) {
return this.range(0, Number(timeArrStart[1]))
}
return []
}
}