I want to subtract 1 month from a given date in (DD/MM/YYYY) format, but when I do that using moment.js, it gives me the result as 01/12/2020. How can I resolve this? Basically when I click on the left-arrow, the month should be subtracted by 1 every
var startOfMonth = moment().clone().startOf('month').format('DD/MM/YYYY');
leftArrow.on('click', function(){
var start = moment(startOfMonth).subtract(1, 'months').format("DD/MM/YYYY");
});
Advertisement
Answer
How can I subtract one month using moment.js?
tl,dr;
moment(date).add(-1, 'months'); // or: moment(date).subtract(1, 'months');
initial answer:
Here’s a basic example.
It stores the date as a moment object, which you then modify by adding or subtracting a month without ever caring what its current value is. You could also store it as a JavaScript Date object, which is useful when you have to communicate it to an external entity (a db, the browser, etc…).
Take away points:
- the date is not stored as text
- the mods to the date are minimal
- the date is parsed to text in only one place: before updating DOM (in
setDatefunction)
// set initial date
let storedDate = moment.now();
// update DOM
setDate(storedDate);
function setDate(date) {
document.getElementById('text').innerText = moment(date).format('MMMM YYYY');
}
function addMonths(months) {
// change stored date
storedDate = moment(storedDate).add(months, 'months');
// update DOM
setDate(storedDate);
}#text {
min-width: 120px;
text-align: center;
display: inline-block
}
button {
cursor: pointer;
}<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script> <div> <button onclick="addMonths(-1)"><</button> <span id="text"></span> <button onclick="addMonths(1)">></button> </div>
