2017-08-14 193 views
1

我正在與圖書館的moment.js在兩個日期之間的月份中獲得差異..代碼工作正常..但是,這隻需要一個月,當他們是同一天例如:第一日期= 2017-08-14,第二個日期= 2017-09-14 ...只有在這種情況下考慮到整個月,現在我的問題是某種方式,如果第二個日期是:2017-09-12例如..我已經考慮到像一個月嗎?在moment.js上比較日期

我離開了我的小代碼。

var date1 = moment('2017-08-14'); 
 
var date2 = moment('2017-09-12'); 
 
var result = date2.diff(date1, 'months'); 
 
console.log(result);
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

+0

我很確定你需要在這裏指定格式。否則,瞬間如何知道是YYYY-MM-DD還是YYYY-DD-MM? – axlj

+2

@axlj如果未指定,我認爲momentjs會回到[YYYY-MM-DD]的[ISO 8601標準](https://momentjs.com/docs/#supported-iso-8601-strings)。 – Terry

回答

3

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>

0

只需提供一個額外的參數的函數(true),其中,根據所述moment.js文檔,是:

默認情況下,moment#diff將返回朝向四捨五入的數零(向下爲積極,向上爲負向)。如果你想要一個浮點數,傳入true作爲第三個參數。在2.0.0之前,moment#diff返回一個四捨五入到最接近的數字,而不是舍入到零的舍入數字。

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>

0

很多這些解決方案都是不錯的。如果你想一個漂亮的整數嘗試運行:

var date1 = moment('2017-08-14').month(); 
var date2 = moment('2017-09-12').month(); 
var monthDiff = Math.abs(date1-date2); 
console.log(monthDiff); 

特里已經提出了類似的解決方案,但這一個擺脫凌亂的負數。它也方便地清理不必要的小數。