snapperoverflow
snapperoverflow

Reputation: 13

Javascript setDate Confusion

I am trying to create a date object that is 90 days from a specified date for use in a date comparison, but am not getting the correct dates. I have isolated my problem to the code shown below.

var now = new Date();
var beforeNow = new Date();
var afterNow = new Date();
var myDate = new Date();
var beforeMyDate = new Date();
var afterMyDate = new Date();

beforeNow.setDate(now.getDate() - 90);
afterNow.setDate(now.getDate() + 90);

myDate.setFullYear(2011, 10, 22); // set to Nov 22, 2011

beforeMyDate.setDate(myDate.getDate() - 90); // set to 90 days before Nov 22, 2011
afterMyDate.setDate(myDate.getDate() + 90); // set to 90 days after Nov 22, 2011

The above is resulting in:

beforeMyDate: Fri Dec 23 2011 08:46:18 GMT-0800 (Pacific Standard Time)

myDate: Tue Nov 22 2011 08:46:18 GMT-0800 (Pacific Standard Time)

afterMyDate: Wed Jun 20 2012 08:46:18 GMT-0700 (Pacific Daylight Time)

Here's a fiddle: http://jsfiddle.net/LnmpR/9/

Any help would be appreciated. Thanks.

Upvotes: 1

Views: 140

Answers (1)

Rob W
Rob W

Reputation: 348992

You have to pass the same base time to the beforeMyDate and afterMyDate Date instances. Currently, you're adding/removing 90 days of the current date (new Date() without parameters returns the current time).

Demo: http://jsfiddle.net/LnmpR/12/

var now = new Date();
var beforeNow = new Date();
var afterNow = new Date();
var myDate = new Date();
var beforeMyDate;
var afterMyDate;

beforeNow.setDate(now.getDate() - 90);
afterNow.setDate(now.getDate() + 90);

myDate.setFullYear(2011, 10, 22);    // set to Nov 22, 2011
beforeMyDate = new Date(myDate);     // Set base to myDate
afterMyDate = new Date(myDate);      // Set base to myDate

beforeMyDate.setDate(myDate.getDate() - 90); // set to 90 days before Nov 22, 2011
afterMyDate.setDate(myDate.getDate() + 90); // set to 90 days after Nov 22, 2011

The values of beforeNow and afterNow might also be off by a few milliseconds, because all of them are new, parameterless instances of the Date object.

Upvotes: 1

Related Questions