比较日期接近时 momentjs diff 的意外结果
Unexpected result from momentjs diff when the compared dates are close
今天和明天的日期(4 月 17 日和 18 日)与当前时刻(对我来说现在是 4 月 17 日)使用 momentjs diff 函数进行比较时,计算的天数均为 0。
为什么会这样,有什么方法可以获得更明智的结果?
function daysRemaining(eventdate) {
var eventdatemoment = moment(eventdate);
var todaysdate = moment();
return eventdatemoment.diff(todaysdate, 'days');
}
console.log(daysRemaining('2015-04-16'));
console.log(daysRemaining('2015-04-17'));
console.log(daysRemaining('2015-04-18'));
console.log(daysRemaining('2015-04-19'));
给出结果:
-1
0
0
1
By default, moment#diff
will return number rounded down. If you want the floating point number, pass true
as the third argument. Before 2.0.0, moment#diff
returned rounded number, not a rounded down number.
因为您在 2015 年 4 月 17 日午夜后 运行 此代码,因此在 2015 年 4 月 18 日午夜 "now" 和 之间向下舍入的天数 是 0
.
我可以看到两个选项以获得更多 "sensible" 答案:
.diff()
的第三个参数传true
得到一个浮点数,没有四舍五入。可以看到结果here.
- 在函数中设置
todaysdate
的值时,使用 moment().startOf('day')
获取今天午夜的日期,这将正确地与 [=19= 的明天相差整数天].
function daysRemaining(eventdate) {
var eventdatemoment = moment(eventdate);
// Remove hours, minutes, seconds, etc. from today's date.
var todaysdate = moment().startOf('day');
return eventdatemoment.diff(todaysdate, 'days');
}
console.log(daysRemaining('2015-04-16'));
console.log(daysRemaining('2015-04-17'));
console.log(daysRemaining('2015-04-18'));
console.log(daysRemaining('2015-04-19'));
今天和明天的日期(4 月 17 日和 18 日)与当前时刻(对我来说现在是 4 月 17 日)使用 momentjs diff 函数进行比较时,计算的天数均为 0。
为什么会这样,有什么方法可以获得更明智的结果?
function daysRemaining(eventdate) {
var eventdatemoment = moment(eventdate);
var todaysdate = moment();
return eventdatemoment.diff(todaysdate, 'days');
}
console.log(daysRemaining('2015-04-16'));
console.log(daysRemaining('2015-04-17'));
console.log(daysRemaining('2015-04-18'));
console.log(daysRemaining('2015-04-19'));
给出结果:
-1
0
0
1
By default,
moment#diff
will return number rounded down. If you want the floating point number, passtrue
as the third argument. Before 2.0.0,moment#diff
returned rounded number, not a rounded down number.
因为您在 2015 年 4 月 17 日午夜后 运行 此代码,因此在 2015 年 4 月 18 日午夜 "now" 和 之间向下舍入的天数 是 0
.
我可以看到两个选项以获得更多 "sensible" 答案:
.diff()
的第三个参数传true
得到一个浮点数,没有四舍五入。可以看到结果here.- 在函数中设置
todaysdate
的值时,使用moment().startOf('day')
获取今天午夜的日期,这将正确地与 [=19= 的明天相差整数天].
function daysRemaining(eventdate) {
var eventdatemoment = moment(eventdate);
// Remove hours, minutes, seconds, etc. from today's date.
var todaysdate = moment().startOf('day');
return eventdatemoment.diff(todaysdate, 'days');
}
console.log(daysRemaining('2015-04-16'));
console.log(daysRemaining('2015-04-17'));
console.log(daysRemaining('2015-04-18'));
console.log(daysRemaining('2015-04-19'));