Javascript setDate Confusion

时间:2012-03-23 16:44:04

标签: javascript

我正在尝试创建一个距指定日期90天的日期对象,以便在日期比较中使用,但是没有得到正确的日期。我已将问题与以下代码隔离开来了。

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

上述结果是:

beforeMyDate :Fri Dec 23 2011 08:46:18 GMT-0800(太平洋标准时间)

myDate :2011年11月22日星期二08:46:18 GMT-0800(太平洋标准时间)

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

这是一个小提琴:http://jsfiddle.net/LnmpR/9/

任何帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

您必须将相同的基准时间传递给beforeMyDateafterMyDate Date个实例。目前,您正在添加/删除当前日期的90天(new Date(),不带参数返回当前时间)。

演示: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

beforeNowafterNow的值也可能会消失几毫秒,因为它们都是Date对象的新的无参数实例。