According to the documentation.diff()
將向下舍入當該值是正的,並且四捨五入當該值爲負(即正值< 1將被向下舍入到0):
默認情況下,moment#diff將返回一個舍入爲零的數字(向下爲正值,向上爲負值)。如果你想要一個浮點數,傳遞true作爲第三個參數。
如果你想有一個浮點數,簡單地做到這一點:
var result = date2.diff(date1, 'months', true);
而且你可以使用自己的四捨五入向上/向下偏好。如果要舍入到最近的一個月,使用方法:
var result = Math.round(date2.diff(date1, 'months', true));
var date1 = moment('2017-08-14');
var date2 = moment('2017-09-12');
var result = date2.diff(date1, 'months', true);
console.log(result);
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
與此相關的,如果你想檢測是否一個月邊界已經兩個日期之間穿過(例如,您希望2017年8月31日與2017年9月1日之間的差額計算爲一個月差額,因爲月份從八月份變更爲九月份),您可以簡單地使用.month()
從日期中提取月份並自行計算差異:
var date1 = moment('2017-08-31');
var date2 = moment('2017-09-01');
var result = date2.month() - date1.month();
console.log(result);
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
我很確定你需要在這裏指定格式。否則,瞬間如何知道是YYYY-MM-DD還是YYYY-DD-MM? – axlj
@axlj如果未指定,我認爲momentjs會回到[YYYY-MM-DD]的[ISO 8601標準](https://momentjs.com/docs/#supported-iso-8601-strings)。 – Terry