2015-10-30 18 views
6

Tôi đọc tài liệu của moment.js rằng nếu bạn muốn thêm 1 tháng kể từ thời điểm ngày hiện tại bạn sử dụng đoạn mã nàyLàm thế nào để thêm đúng 1 tháng kể từ nay đến ngày hiện tại trong moment.js

var moment = require('moment'); 
var futureMonth = moment().add(1, 'M').format('DD-MM-YYYY'); 

nhưng vấn đề ngay bây giờ, nó không đúng cách thêm ngày một cách chính xác, ví dụ để nói ngày hiện tại là 31/10/2015, giải thích trong mã

var currentDate = moment().format('DD-MM-YYYY'); 
var futureMonth = moment().add(1, 'M').format('DD-MM-YYYY'); 

console.log(currentDate) // Will result --> 31/10/2015 
console.log(futureMonth) // Will result --> 30/11/2015 

nếu bạn có một cái nhìn lúc lịch hiện tại , 1 tháng từ 31/10/2015 được coi là 1/12/2015

Có ai có thể cho tôi một số ý kiến ​​về cách khắc phục sự cố này không.

Cảm ơn bạn

+0

Tôi có ý tưởng từ thời gian lịch hiện tại, nếu đó là những gì bạn đang yêu cầu. –

+1

Tôi đoán những gì bạn đang tìm kiếm là 'moment(). Thêm (30," days ")'. –

+0

@Gesper Tôi nghĩ moment.js xác định tháng của chính nó mà không cần tôi phải xác định nó. –

Trả lời

21
var currentDate = moment('2015-10-30'); 
var futureMonth = moment(currentDate).add(1, 'M'); 
var futureMonthEnd = moment(futureMonth).endOf('month'); 

if(currentDate.date() != futureMonth.date() && futureMonth.isSame(futureMonthEnd.format('YYYY-MM-DD'))) { 
    futureMonth = futureMonth.add(1, 'd'); 
} 

console.log(currentDate); 
console.log(futureMonth); 

DEMO

EDIT

moment.addRealMonth = function addRealMonth(d) { 
    var fm = moment(d).add(1, 'M'); 
    var fmEnd = moment(fm).endOf('month'); 
    return d.date() != fm.date() && fm.isSame(fmEnd.format('YYYY-MM-DD')) ? fm.add(1, 'd') : fm; 
} 

var nextMonth = moment.addRealMonth(moment()); 

DEMO

+0

Chỉ cần tự hỏi mã này có linh hoạt không? hoặc chỉ sửa chữa vấn đề ngày hiện tại 31/10/2015 - 1/12/2015? –

+0

Điều này chỉ xảy ra theo cách khác - tháng 7 và tháng 8 đều có 31 ngày. Khi bạn thêm một tháng vào ngày 31 tháng 7, bạn sẽ nhận được ngày 1 tháng 9. – Jamiec

+0

Với câu trả lời được cập nhật, mã này linh hoạt. – silentw

Các vấn đề liên quan