If i have a variable that returns a date, in the format of dd MMM yyyy, so 28 Aug 2014, how can i get the date of the previous month.
I can modify the month via:
$scope.DateMapping = function (months) { var myVariable = "28 Aug 2014" var makeDate = new Date(myVariable); prev = new Date(makeDate.getFullYear(), makeDate.getMonth()+1, 1); });
Essentially, this is adding one to the Month.. But how can i account for years, so if the current date is 12 Dec 2014, the previous would be 12 Jan 2013?
My application is using AngularJS can make use of filters.
UPDATE:
var myVariable = "28 Aug 2014" var makeDate = new Date(myVariable); var prev = new Date(makeDate.getFullYear(), makeDate.getMonth()+1, makeDate.getMonth()); console.log(myVariable) console.log(makeDate) console.log(prev) Output: 28 Aug 2014 Thu Aug 28 2014 00:00:00 GMT+0100 (GMT Standard Time) Mon Sep 01 2014 00:00:00 GMT+0100 (GMT Standard Time)
How comes although the month has incremented, the day is showing as 01 instead of 28?
Advertisement
Answer
var myVariable = "28 Aug 2014" var makeDate = new Date(myVariable); makeDate = new Date(makeDate.setMonth(makeDate.getMonth() - 1));
Update:
A shorter version:
var myVariable = "28 Aug 2014" var makeDate = new Date(myVariable); console.log('Original date: ', makeDate.toString()); makeDate.setMonth(makeDate.getMonth() - 1); console.log('After subtracting a month: ', makeDate.toString());
Update 2:
If you don’t want to deal with corner cases just use moment.js. Native JavaScript API for Date is bad.