【问题标题】:Javascript setDate ConfusionJavascript setDate 混淆
【发布时间】:2012-03-23 16:44:04
【问题描述】:

我正在尝试创建一个距指定日期 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:2011 年 12 月 23 日星期五 08:46:18 GMT-0800(太平洋标准时间)

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

afterMyDate:2012 年 6 月 20 日星期三 08:46:18 GMT-0700(太平洋夏令时间)

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

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

【问题讨论】:

    标签: javascript


    【解决方案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 对象的新的无参数实例。

    【讨论】:

    • 非常感谢罗布。祝自己周末愉快!
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2014-08-13
    • 2015-12-25
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多