Moment.js差异行为

时间:2018-04-06 08:29:07

标签: javascript momentjs

我有约会,我想在今天减去这个日期。这是我的例子:

date.format('YYYY-MM-DD')
"2018-04-07"
moment().format('YYYY-MM-DD')
"2018-04-06"
date.diff(moment(), 'days')
0

diff调用返回0而不是1.这里有什么问题?

4 个答案:

答案 0 :(得分:1)

moment()返回包含时间的完整时刻,因此它从今天开始,包括时间,到4月7日午夜,这不是一整天。

答案 1 :(得分:1)

  

默认情况下,moment#diff会将结果截断为零小数   地方,返回一个整数。如果你想要一个浮点数,   传递true作为第三个参数。在2.0.0之前,时刻#diff返回了一个   数字四舍五入到最接近的整数,而不是截断的数字。

要查看完整值,请将true作为第三个参数传递:

 now.diff(date, 'days', true)

如果您只想比较日期,请使用:

var now = moment()。startOf(' day');

将在本地时区将时间设置为00:00:00。并与日期进行比较

答案 2 :(得分:1)

使用fromNow()功能了解您获取0而不是1的原因。这是非常直截了当的。

这样做:

moment(date).fromNow();

如果时间超过24小时,它将给你通过的天数,否则它将以小时为单位给出时间。例如2小时前,23小时等。

以下是示例:

console.log(moment("2018-04-06", "YYYY-MM-DD").fromNow());
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>

所以你可以看到它正在返回18 hours ago(截至目前),这不到24小时,即1天。

我建议使用fromNow代替diff来获得确切的差异。

希望现在告诉你。

答案 3 :(得分:0)

我也遇到了同样的问题。所以在对 StackOverflow 和 moment.js 文档进行了一些研究之后,我想出了这个解决方案。非常适合我。

const date1 = "2021-05-12T06:30:00.000Z"
const date2 = "2021-05-18T06:30:00.000Z"

const day1 = moment((moment(date1).format("YYYY-MM-DD")).split("-"))
const day2 = moment((moment(date2).format("YYYY-MM-DD")).split("-"))


const diff = day2.diff(day1,'days')