【问题标题】:Excel and javascript date calculations differExcel 和 javascript 日期计算不同
【发布时间】:2012-01-19 21:46:17
【问题描述】:

我正在尝试在 javascript 中进行与 excel 中匹配的日期计算。

//Excel 
=(EDATE(DATE(2000,6,1),60)-DATE(2012,1,20))

这给出了 -2424 的结果

所以我尝试在 javascript 中使用以下内容进行相同的计算

//Javascript -  using datejs library
a = Date.parse('2000/06/01').addMonths(60);
b = Date.parse('2012/01/20');
a.setHours(12,0,0);
b.setHours(12,0,0);
span = new TimeSpan(a - b);
console.log(span.getDays());

这给出了 -2423 的结果

我不明白为什么我会失去一天。 任何人都可以阐明这是如何发生的。

提前为任何帮助干杯。 :)

【问题讨论】:

  • 您可以尝试打印出EDATE()addMonths() 计算的内容,看看它们是否引用了同一天?
  • excel 结果是正确的:从 2005-06-01,你需要 30+31+31+30+31+30+31 到 2006-01-01,然后 365* 6+1(2008 闰年)到 2012-01-01,然后 19 天到 2012-01-20。

标签: javascript excel date datejs


【解决方案1】:

如果不出意外,2005 年和 2008 年发生了两次闰秒(都在 12 月 31 日),这两个应用程序都可以考虑到这一点。您已将 JS 日期明确设置为“中午”,但没有为 Excel 指定时间,因此它可能默认为午夜,即闰秒发生的时间。这会使您的 Excel 日期/时间与 JS 计算相差 2 秒,并且可能会越过午夜边界,这是您错过的一天。

【讨论】:

  • 我本来没有中午的设置,但得到了相同的结果,所以在阅读了这里的一些帖子后,我添加了它,看看它是否有帮助,可惜没有。
  • 我在javascript中将两个日期的时间设置为午夜,似乎已经解决了这个问题。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多