【问题标题】:Accurately calculate days between two dates (including time)准确计算两个日期之间的天数(包括时间)
【发布时间】:2014-11-30 16:05:00
【问题描述】:

我正在开发一个前端应用程序,并试图计算两个日期之间的天数,我越了解正确/准确的方法来计算两个日期之间的天数,我就越感到困惑.

所以我想,我将在这里发布另一个问题,以最终阐明这种困惑。

我也在尝试在最安全的时候进行计算;当我从下面的后端获得原始 UTC 日期时,是在它们转换为区域设置日期和时间之后吗?我的意思是,获取 UTC 日期之间的差异或区域设置日期和时间之间的差异会更好吗?

这里是 UTC 日期:

UTC Date 1:  2014-11-30T15:41:51.012+0000
UTC Date 2:  2014-01-09T02:56:36.000+0000

这里是区域设置日期(在 Windows 上;这将是 Linux 上的差异格式):

Locale Date 1:  11/30/2014, 3:41:51 PM
Locale Date 2:  1/9/2014, 2:56:36 AM

所以我的问题是,其中哪一个会给出准确的 daysBetweenDates、UTC 或 Locale?这也是如何计算的,JavaScript 函数 sn-p 或演示会帮助我和其他人。

谢谢!

【问题讨论】:

  • 我真的不明白这个问题,但 UTC 显然在逗号分辨率后有 3 位数字,而第二个“语言环境”示例只有整数秒分辨率。此外,UTC 有关于时区的信息。
  • 你试过比较结果吗?你得到了什么? JavaScript 以 UTC 格式存储日期,用户如何查看日期取决于使用的 toString 方法。

标签: javascript date datetime


【解决方案1】:

这就是使用纯 JS 的方式:

var Date1 = new Date('2014-11-30T15:41:51.012+0000'.substr(0,10)).getTime();
var Date2 = new Date('2014-01-09T02:56:36.000+0000'.substr(0,10)).getTime();
var Diff = Math.floor(Math.max(Date1,Date2)-Math.min(Date1,Date2))/1000/60/60/24;

【讨论】:

  • UTC 或区域设置版本?你能解释一下为什么它会在几天内给出准确的日期和时间差异吗?这也返回 NaN
  • 我认为这并不重要,但 UTC 可能是更好的选择。基本上,您可以将 Date1 和 Date2 视为自 1970 年 1 月 1 日以来的毫秒数。通过从较晚的日期中减去初始日期,您最终得到两个日期之间时间差的毫秒数。通过将此值转换为天数并将该值取底,您最终会得到准确的结果。
  • 我刚刚这样做了:console.log('Diff UTC: ', Math.floor(('2014-11-30T16:27:16.059+0000'-'2014-01-09T02:56:36.000+0000')/1000/60/60/24)); 并得到了NaN
  • 另外,为什么我们不考虑时间,因为在计算日期差异时会随着时间的推移而产生差异?
  • 我删除了它们,因为我认为您不需要这些额外信息。您指定的整个格式与 JS 不直接兼容,所以我做了一个快速实现。
【解决方案2】:

老实说,我会使用 Moment.js

http://momentjs.com/docs/#/displaying/difference/

var a = moment('2014-11-30T15:41:51.012+0000');
var b = moment('2014-11-30T15:41:51.012+0000');
var dayDiff = a.diff(b, 'days');

您可以在本地执行此操作,但这会为您完成,它很轻巧,可以处理您所有的语言环境问题,并且您可能会希望在其他地方进行其他日期操作,您也可以将其用于

【讨论】:

  • @J Tolley - 请您提供一个不使用任何库的示例。
  • 不,抱歉。我的回答的重点是我建议您使用图书馆并省去头痛。我敢肯定,如果您迫切希望以本机方式进行操作,那么示例代码将会有另一个答案。
  • 感谢您的快速反馈。另外,您的方法有多准确,不确定此功能在后台如何执行,请您解释一下它在后台的作用。
猜你喜欢
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多