我有约会,我想在今天减去这个日期。这是我的例子:
date.format('YYYY-MM-DD')
"2018-04-07"
moment().format('YYYY-MM-DD')
"2018-04-06"
date.diff(moment(), 'days')
0
diff
调用返回0而不是1.这里有什么问题?
答案 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')