即使在超过2月

时间:2017-07-12 19:24:03

标签: javascript momentjs

是否有任何解决方法或解决方法 - 即使不使用Moment.js?

<form id="DateFor," class="row-form" method="post" action="">
               <p>
                  <label for="ETL_DATE">Search by date:</label>
                  <span>
                    <script>
                    var curr_month_day = moment();
                    var prev6_month_start = moment().subtract(6, 'months').startOf('month');
                    var prev6_month_end = moment().subtract(6, 'months').endOf('month');
                    var Dur_prev6_month_start = moment.duration({ from: curr_month_day, to: prev6_month_start });
                    var Dur_prev6_month_end = moment.duration({ from: curr_month_day, to: prev6_month_end });
                    document.write('<input data-widget="datepicker" data-format="mmm dd, yyyy" type="text" data-min="' +Math.round(Dur_prev6_month_start.asDays())+ '" data-max="' +Math.round(Dur_prev6_month_end.asDays())+ '" data-select-months="false"  data-select-years="false" value="" size="20" id="ETL_DATE" name="ChangeDatePicker">');
                    </script>
                  </span>
               </p>
            </form>

此代码返回2017年1月(目前) - 2016年12月30日和2017年1月29日的混乱开始和结束日期。在我看来,2月份的不同天数是根本原因。

应该正确计算2017年1月第一天和最后一天的天数。

编辑: 我想确认问题是Moment.js的'.duration'和'.subtract'。

1 个答案:

答案 0 :(得分:0)

伙计 - 我找到了一个解决方法,但我完全删除了&#39; Moment.js&#39;并开始使用一点&#39; Date.js&#39;和普通的JavaScript。

这是修复:

<form id="DateFor," class="row-form" method="post" action="">
               <p>
                  <label for="ETL_DATE">Search by date:</label>
                  <span>
                    <script>
                    var curr_month_day = new Date (), y = curr_month_day.getFullYear(), m = curr_month_day.getMonth(), d = curr_month_day.getDate();
                    console.log(m)

                    var prev6_month_begin = new Date(y, m - 6).clearTime().moveToFirstDayOfMonth();
                    var prev6_month_end = new Date(y, m - 6).clearTime().moveToLastDayOfMonth();
                    console.log(prev6_month_begin)
                    console.log(prev6_month_end)
                    var timeDiff = Math.abs(curr_month_day.getTime() - prev6_month_begin.getTime());
                    var Dur_prev6_month_start = Math.ceil(timeDiff / (1000 * 3600 * 24));
                    console.log(Dur_prev6_month_start);

                    var timeDiff = Math.abs(curr_month_day.getTime() - prev6_month_end.getTime());
                    var Dur_prev6_month_end = Math.ceil(timeDiff / (1000 * 3600 * 24));
                    console.log(Dur_prev6_month_end);

                    document.write('<input data-widget="datepicker" data-format="mmm dd, yyyy" type="text" data-min="-' +(Dur_prev6_month_start -1)+ '" data-max="-' +(Dur_prev6_month_end -1)+ '" data-select-months="false"  data-select-years="false" value="" size="20" id="ETL_DATE" name="ChangeDatePicker">');
                    </script>
                  </span>
               </p>
            </form>