【问题标题】:javascript .setDate() wrong date outputjavascript .setDate() 错误的日期输出
【发布时间】:2015-09-16 08:24:50
【问题描述】:

我正在尝试从开始日期和偏移量(数字 + 单位)的范围内获取新日期,但是 .setDate 的行为不正确,下面代码中的 t.start 和 t.end 都是正确的 ISOStrings(创建使用 javascript 函数 .toISOString()):

while(t.start < t.end) {
        console.log(t.start);
        t.start = new Date(t.start);
        console.log("original toDate "+t.start);
        //calculate the new start
        switch(unit) {
            case "giorno":
                console.log("adding days: " + n + " to " + t.start.getDate());
                t.start.setDate(t.start.getDate() + n);
                break;
            case "settimana":
                t.start.setDate(t.start.getDate() + n*7);
                break;
            case "mese":
                t.start = addMonths(t.start, n);
                break;
            case "anno":
                t.start.setFullYear(t.start.getFullYear() + n);
                break;
        }
        console.log("Post add: "+t.start);
        t.start  = t.start.toISOString();
    }

“giorno”、“settimana”、“mese”、“anno”是意大利对应的“day”、“week”、“month”、“year”,你可以从代码中猜到。 在 n=1、unit="giorno" 和 t.end = 2015-09-13T00:00:00.000Z 的 2015-09-11T00:00:00.000Z 上运行此代码会返回此输出:

2015-09-11T00:00:00.000Z
original toDate Fri Sep 11 2015 02:00:00 GMT+0200 (W. Europe Summer Time)
adding days: 1 to 11
Post add: Sun Dec 20 2015 02:00:00 GMT+0100 (W. Europe Standard Time)

前 3 个 console.log() 是我所期望的。 最后一个应该是 Sat Sep 12 2015... 我不明白为什么不是(我也尝试使用 moment.js 将所有内容转换为时刻,同样的错误)

【问题讨论】:

  • 这可能是一个选项,但我真的很想知道为什么这不起作用。我认为它应该在没有外部资源的情况下是可行的(我尝试了 moment.js 只是因为它已经加载,因为此代码与 FullCalendar.js 一起使用)
  • 它在 jsfiddle 中工作:jsfiddle.net/tumh6wtt

标签: javascript date


【解决方案1】:

当我将此代码放在您的 while 循环前面时,它会按预期工作:

t={}
t.start="2015-09-11T00:00:00.000Z"
t.end="2015-09-13T00:00:00.000Z"
unit="giorno"
n=1

但是,当我用

替换最后一行时
n="1"

我得到了和你一样的结果。

自从

console.log("1" + 11)

给出 111,您似乎将日期设置为 9 月初之后的 111 天,即 12 月 20 日。

也许您需要在顶部附近使用n=parseInt(n),以便添加数字而不是字符串?

【讨论】:

  • 好收获!!我不得不承认,我想我几个小时都不会想到这一点 :-)
  • 你是个天才。这正是问题所在,我从来没有想过它,因为当我得到 n 的值时,我检查它实际上是一个整数,但事实证明我需要强制 n = parseInt(value) 而不是 n = value。非常感谢
猜你喜欢
  • 2011-07-26
  • 2021-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 2021-01-27
相关资源
最近更新 更多