【问题标题】:Momentjs , How to skip sunday?Momentjs,如何跳过星期天?
【发布时间】:2016-03-16 03:40:01
【问题描述】:

我有一个条件,我必须将开始和结束日期从父组件发送到子组件。

简单来说,我将向子组件发送开始日期和结束日期。 结束日期将添加到开始日期(可以是 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}
    },

任何完成或改进上述代码的建议都将受到高度赞赏。

【问题讨论】:

标签: javascript reactjs momentjs


【解决方案1】:

您可以创建这样的函数来计算所需日期:

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(你可以在控制台找到结果)

【讨论】:

    【解决方案2】:

    我最终使用了 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)}/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-03
      • 2015-10-05
      • 2020-09-28
      • 2017-07-01
      • 2021-04-24
      • 2023-04-11
      • 1970-01-01
      • 2022-07-06
      相关资源
      最近更新 更多