我正在编写一小段JavaScript,它将帮助我获取2个日期(包括今天)之间的值。
这是我的代码。
var beforeSevenDays = moment(Date.now() - 7 * 24 * 3600 * 1000).format('YYYY-MM-DD');
var i = 0;
for (var m = moment(beforeSevenDays); m.diff(moment(Date.now()).local('in'), 'days') <= 0; m.add(1, 'days')) {
console.log("i: " + i + " " + m.format('YYYY-MM-DD'));
i += 1;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
当我运行这段代码时,我得到的输出是
i: 0 2018-10-03
i: 1 2018-10-04
i: 2 2018-10-05
i: 3 2018-10-06
i: 4 2018-10-07
i: 5 2018-10-08
i: 6 2018-10-09
i: 7 2018-10-10
i: 8 2018-10-11
但是我期望的输出是
i: 0 2018-10-03
i: 1 2018-10-04
i: 2 2018-10-05
i: 3 2018-10-06
i: 4 2018-10-07
i: 5 2018-10-08
i: 6 2018-10-09
i: 7 2018-10-10
在这里,当我将查询修改为m.diff(moment(Date.now()).local('in'), 'days') < 0
时,我得到的输出为
i: 0 2018-10-03
i: 1 2018-10-04
i: 2 2018-10-05
i: 3 2018-10-06
i: 4 2018-10-07
i: 5 2018-10-08
i: 6 2018-10-09
请让我知道我要去哪里哪里以及如何解决它。
答案 0 :(得分:1)
代码的问题在于,您正在比较完整日期,moment(Date.now())
将创建一个包含日期和时间的时刻,因此您的输出取决于执行它的时间。
我建议使用startOf('day')
:
通过将原始时刻设置为单位时间的开始来对其进行突变。
这里有一个现场样本:
var beforeSevenDays = moment().subtract(7, 'days').format('YYYY-MM-DD');
var today = moment().startOf('day');
var i = 0;
for (var m = moment(beforeSevenDays); m.diff(today, 'days') <= 0; m.add(1, 'days')) {
console.log("i: " + i + " " + m.format('YYYY-MM-DD'));
i += 1;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
旁注:您只需使用moment()
即可获取当前日期和时间,而无需使用Date.now()
,此外,您可以使用subtract()
来获取7天前的数据而无需进行数学运算,最终,无需使用local()
(不要与locale()
融合),因为力矩是默认在本地模式下创建的。
答案 1 :(得分:1)
这里的问题是按日的diff函数在今天和明天的日期都返回0。这样,当条件小于或等于0时,它就会在for循环内显示的原因。
var moment =require('moment');
var beforeSevenDays = moment().subtract(7, 'days').format('YYYY-MM-DD');
var i = 0;
for (var m = moment(beforeSevenDays); m.diff(moment(Date.now()), 'days') <0 || m.isSame(moment(), 'day'); m.add(1, 'days')) {
console.log("i: " + i + " " + m.format('YYYY-MM-DD'));
i += 1;
}
您可以添加另一个条件以在同一天进行检查。
答案 2 :(得分:0)
混乱似乎源于Target "install" does not exist in the project "integration"
如何构造moment
的差异。
通过仅减去日期部分,它看起来像是另一天,但是您要让days
到moment
日期。因此,关键时刻是找出某些时间单位的差异并将其转换为天。
如下面的代码片段所示,day diff为0,而hour diff不为0。
因此,您需要将时间固定在某个时间,例如diff
startOf('day')
var beforeSevenDays = moment(Date.now() - 7 * 24 * 3600 * 1000).format('YYYY-MM-DD');
var i = 0;
for (var m = moment(beforeSevenDays); m.diff(moment(Date.now()).local('in'), 'days') <= 0; m.add(1, 'days')) {
console.log("diff in hours is: " + m.diff(moment(Date.now()).local('in'), 'hours'))
console.log("diff in days is: " + m.diff(moment(Date.now()).local('in'), 'days'))
console.log("diff in days with startOf is: " + m.diff(moment(Date.now()).startOf('day').local('in'), 'days'))
console.log("i: " + i + " " + m.format('YYYY-MM-DD'));
i += 1;
}