我有一个条件,我必须从父组件发送一个子组件的开始和结束日期。
简单来说,我将向子组件发送开始日期和结束日期。 结束日期将添加到开始日期(可以是3,5,7)。 即如果开始日期为2016-01-01(要添加的变量为3),则结束日期为2016-01-03。
但是,我需要考虑另一个必须跳过星期天的情况。
假设2016-01-02是星期日,则结束日期应为2016-01-04。
开始日期在getInitialState()
中初始化getInitialState(){
variable_to_add:5,
start_date: moment().format("YYYY-MM-DD"),
}
componentDidMount(){
this.setState({end_date:moment().add(Number(variable_to_add),'day').format("YYYY-MM-DD")
}
render(){
return <CallChild start_date={this.state.start_date} end_date={this.end_date}
},
任何完成或改进上述代码的建议都将受到高度赞赏。
答案 0 :(得分:2)
你可以创建这样的函数来计算所需的日期:
function addDaysWithoutSundays(date, daysToAdd) {
var tempEndDate = moment(date).add(daysToAdd, "day"),
countSundaysBetweenDates = function (startDate, endDate) {
var daysDiff = endDate.diff(startDate, 'days');
return Math.floor((startDate.day() + daysDiff)/ 7 );
},
countSundays = countSundaysBetweenDates(date, tempEndDate);
return moment(date).add(daysToAdd - countSundays, 'days');
}
你可以在这里试试JsFiddle(你可以在控制台找到结果)
答案 1 :(得分:0)
我最终使用Pure Javascript,并在Stack overflow Link的另一页中找到提示。
formatDate:function(date) {
var d = new Date(date),
month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();
if (month.length < 2) month = '0' + month;
if (day.length < 2) day = '0' + day;
return [year, month, day].join('-');
},
addWeekdays:function(date, days) {
var days = days-2;
date.setDate(date.getDate()+2);
var counter = 0;
if(days > 0 ){
while (counter < days) {
date.setDate(date.getDate() + 1 ); // Add a day to get the date tomorrow
var check = date.getDay(); // turns the date into a number (0 to 6)
if (check == 0) {
// Do nothing it's the weekend (0=Sun & 6=Sat)
}
else{
counter++; // It's a weekday so increase the counter
}
}
}
return this.formatDate(date);
},
我的getInitailState如下所示:
getInitialState: function() {
return {
date_from: moment().isoWeekday(1).format("YYYY-MM-DD"),
no_of_items : 7,
start_date: moment().add(2,'day').format("YYYY-MM-DD"),
value:0,
};
},
我的渲染功能如下:
render(){
return <DayMenu weekday={(item.weekday).toString()} color={this.getRandomColor()} dataItem={dataItem} start_date={this.state.start_date} end_date={this.addWeekdays(new Date(this.state.start_date),this.state.no_of_items)}/>