I'm trying to find the date one month ago from a specific date. But facing a strange problem.
var d = new Date(2009, 1, 25);
var dt = d.getDate();
var m = d.getMonth() - 1;
var y = d.getFullYear();
if(m === 0) {
m = 12;
y -= 1;
}
var numDays = new Date(y, m + 1, 0).getDate();
if(d.getDate() > numDays) {
dt = 0;
}
console.log(y, m, dt); // 2008 12 25
var sd = new Date(y, m, dt);
console.log(sd.toString()); // Sun Jan 25 2009 00:00:00 GMT+0530 (IST)
While the first console is printing: 2008 12 25
properly, but the second log shows: Sun Jan 25 2009 00:00:00 GMT+0530 (IST)
. How is this possible?
Addition: More Detailed Question
I'm not concerned about the formatting. I'm surprised why a different date object is created while I'm creating the date with the same variables I'm printing just above.
Javascript date starts from 0. 0 => JAN, 1 => Feb ... 11 => DEC
In your case. U set month to 12. As a result when u create a date object, 12 exceeds 11(DEC) and javascript increment 1 more month which results in 2009 JAN 25.
var sd = new Date(2008, 12, 25);// is equal to Date(2009, 0, 25);
Change ur logic a bit as follows:
var d = new Date(2009, 1, 25);
var dt = d.getDate();
var m = d.getMonth() - 1;
var y = d.getFullYear();
if(m === 0) {
m = 11;
y -= 1;
}
var numDays = new Date(y, m + 1, 0).getDate();
if(d.getDate() > numDays) {
dt = 0;
}
console.log(y, m, dt); // 2008 12 25
var sd = new Date(y, m, dt);
console.log(sd.toString());