繁体   English   中英

比较Date范围和moment.js

[英]Compare Date range with moment.js

我正在尝试获得以下输出:

在此处输入图片说明

这是我的代码:

 const start = "12/7/2018"; const end = "10/6/2019"; var startLease = moment(start, "MM/DD/YYYY"); var endLease = moment(end, "MM/DD/YYYY"); var array = []; var i = 0; var nextEnd; while (1 == 1) { var nextStart = nextEnd ? (nextEnd.date() > 28 ? nextEnd : nextEnd) : nextEnd || startLease.clone().add(i, 'M'); nextEnd = startLease.clone().add(i + 1, 'M') > endLease ? endLease : startLease.clone().add(i + 1, 'M'); if (nextEnd.date() > 28) { nextEnd.subtract(1, 'days') } else {} array.push(nextEnd.diff(nextStart, 'days')); if (nextEnd >= endLease) { break; } else {} i += 1 } console.log(array); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script> 

问题:不是从去的7th-6th ,它会从7th-7th每月。 我尝试了.subtract(1,'days'),但是没有输出正确的值。 但是,这在本月末有效。

任何帮助表示赞赏。 谢谢。

我在循环中添加了一些日志记录,并在一次迭代后将其切断。

对于您的示例,只有第一个月是错误的,因此,您的期望是,如果在2018年12月7日之前增加1个月,您将获得2019年1月6日的收入(实际上您将获得2019年1月7日的收入)。

我不确定导致减去一天的情况应该怎么做。 nextEnd.date()将解析为该月的一天,对于您的示例,该日期始终小于28。

 const start = "12/7/2018"; const end = "10/6/2019"; var startLease = moment(start, "MM/DD/YYYY"); var endLease = moment(end, "MM/DD/YYYY"); var array = []; var i = 0; var nextEnd; while (1 == 1) { var nextStart = nextEnd ? (nextEnd.date() > 28 ? nextEnd : nextEnd) : nextEnd || startLease.clone().add(i, 'M'); console.log(nextStart); nextEnd = startLease.clone().add(i + 1, 'M') > endLease ? endLease : startLease.clone().add(i + 1, 'M'); console.log(nextEnd); if (nextEnd.date() > 28) { nextEnd.subtract(1, 'days') } else {} array.push(nextEnd.diff(nextStart, 'days')); if (nextEnd >= endLease) { break; } else {} i += 1; break; } console.log(array); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script> 

这为我工作:

              while(1==1){
                var nextStart = nextEnd ? nextEnd : startLease.clone().add(i, 'M');
                var tempstart = startLease.clone();
                tempstart.date(1);
                if (startLease.date() < endLease.date() && array.length == 0) {
                    i = -1;
                }
                tempstart.add(i + 1, 'M');

                var days = [31, 28, 31, 30, 31, 30 ,31, 31, 30, 31, 30, 31];
                var year = tempstart.year();
                if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
                    days[1] = 29;

                if (endLease.date() > days[tempstart.month()]) {
                    tempstart.date(days[tempstart.month()]);
                } else {
                    tempstart.date(endLease.date());
                }

                nextEnd = tempstart > endLease ? endLease : tempstart;

                var diff_sum = nextEnd.diff(nextStart, 'days');

                array.push (diff_sum);

                if (nextEnd >= endLease) {
                    break;
                }
                i += 1
            }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM