Moment JS 日期差异为月份
Moment JS Date Difference as Month
我正在尝试获取当前当地时间与 2021 年 12 月 1 日下午 4 点之间的时差。相差 6 个月零 2 小时。在这种情况下,我希望答案类似于 6.02。但是5.98来了。我怎样才能得到我想要的答案?
enter image description here
根据 moment.js docs,在您的示例中获取两个日期之间的差异的标准方法是 now.diff(date, 'months', true)
,这应该 return 一个大于 6 的浮点数。
now.diff(date)
returns 这两个时间点之间的毫秒差。调用 moment.duration({milliseconds}).asMonths()
并不理想,因为某些月份可能有 30 天,而其他月份可能有 31 天。 moment.js 似乎使用 30 到 31 天之间的某个时间作为一个月的持续时间。为了解决这个问题,moment.js 在文档中讨论了日历差异:
moment#diff
has some special handling for month and year diffs. It is optimized to ensure that two months with the same date are always a whole number apart.
So Jan 15 to Feb 15 should be exactly 1 month.
Feb 28 to Mar 28 should be exactly 1 month.
Feb 28 2011 to Feb 28 2012 should be exactly 1 year.
“一个月”的定义只能是“模糊”的,因为日历上的月份长短不一。定义它的一种方法是将年份分成 12 个相等的部分并将其用作 "month-metric":
function monthsUntil(year,month,day,hour=0){
const trg=new Date(year,month-1,day,hour,0,0),
now=new Date(), nxt=new Date();
nxt.setFullYear(nxt.getFullYear()+1);
return (12*(trg-now)/(nxt-now)).toFixed(4);
}
console.log(monthsUntil(2022,12,1,16))
我正在尝试获取当前当地时间与 2021 年 12 月 1 日下午 4 点之间的时差。相差 6 个月零 2 小时。在这种情况下,我希望答案类似于 6.02。但是5.98来了。我怎样才能得到我想要的答案?
enter image description here
根据 moment.js docs,在您的示例中获取两个日期之间的差异的标准方法是 now.diff(date, 'months', true)
,这应该 return 一个大于 6 的浮点数。
now.diff(date)
returns 这两个时间点之间的毫秒差。调用 moment.duration({milliseconds}).asMonths()
并不理想,因为某些月份可能有 30 天,而其他月份可能有 31 天。 moment.js 似乎使用 30 到 31 天之间的某个时间作为一个月的持续时间。为了解决这个问题,moment.js 在文档中讨论了日历差异:
moment#diff
has some special handling for month and year diffs. It is optimized to ensure that two months with the same date are always a whole number apart.So Jan 15 to Feb 15 should be exactly 1 month.
Feb 28 to Mar 28 should be exactly 1 month.
Feb 28 2011 to Feb 28 2012 should be exactly 1 year.
“一个月”的定义只能是“模糊”的,因为日历上的月份长短不一。定义它的一种方法是将年份分成 12 个相等的部分并将其用作 "month-metric":
function monthsUntil(year,month,day,hour=0){
const trg=new Date(year,month-1,day,hour,0,0),
now=new Date(), nxt=new Date();
nxt.setFullYear(nxt.getFullYear()+1);
return (12*(trg-now)/(nxt-now)).toFixed(4);
}
console.log(monthsUntil(2022,12,1,16))