【问题标题】:Dart datetime difference in weeks, month and years周、月和年的 Dart 日期时间差异
【发布时间】:2020-02-11 00:23:36
【问题描述】:

我正在处理一个项目,并希望添加 DateTime 中的分钟、小时、天、周、月和年的差异。我能够在几分钟到几天内到达。例如

DateTime.now().difference(DateTime(2019, 10, 7)).inDays

但我花了数周、数月和数年的时间来创作它。我该怎么做,请帮忙

【问题讨论】:

  • 你试过什么?几天到几周之间的转换应该很简单。对于几个月,你如何定义一个月的长度?
  • 基于一个数组,该数组在 12 个月中有几天 _daysInMonthArray = [0,31,28,31,30,31,30,31,31,30,31,30,31]; 其中数组 1 是一月
  • 从 1 月 31 日到 2 月 1 日有多少个“月”? 0? 1? 1 月 16 日至 2 月 13 日(跨度为 28 天)之间呢?会根据 1 月或 2 月的天数来衡量吗?
  • @jamesdlin 我能够创建自己的方式,参考 momentjs 处理差异的方式,将在下面发布
  • @jamesdlin 我已经发布了我的答案,请看下面,告诉我你的想法

标签: datetime flutter time dart


【解决方案1】:

我构建了一个包来帮助我解决这个问题,名为 Jiffy

Jiffy([2018, 1, 29]).diff(Jiffy([2019, 10, 7]), Units.DAY); // -616
Jiffy([2018, 1, 29]).diff(Jiffy([2019, 10, 7]), Units.WEEK); // -88
Jiffy([2018, 1, 29]).diff(Jiffy([2019, 10, 7]), Units.MONTH; // -20
Jiffy([2018, 1, 29]).diff(Jiffy([2019, 10, 7]), Units.YEAR); // -1

【讨论】:

  • 很棒的包裹!真的帮了我
【解决方案2】:

有一种非常简单的方法可以做到这一点,并且只需要很少的日期/时间算术知识。

只需比较两个 DateTimes 的 microsecondSinceEpoch 值:

Duration compare(DateTime x, DateTime y) {
   return Duration(microseconds: (x.microsecondsSinceEpoch - y.microsecondsSinceEpoch).abs())
}

DateTime x = DateTime.now()
DateTime y = DateTime(1994, 11, 1, 6, 55, 34);

Duration diff = compare(x,y);

print(diff.inDays);
print(diff.inHours);
print(diff.inMinutes);
print(diff.inSeconds);

上述代码有效,并且比检查闰年和基于时间的异常异常更有效。

为了获得更大的单位,我们可以近似。大多数最终用户都对这种一般近似感到满意:

周:将天除以 7 并取整。

月:将天除以 30.44 并取整;如果

年:将天除以 365.25 和下限,并显示月模 12。

【讨论】:

  • 除此之外,它最多只能工作几天,而不是几个月、几周或几年。
  • 周:将天除以 7 并取整。月:将天数除以 30.44 并取整。年:将天除以 365.25 和下限,并以 12 为模显示月份。在绝大多数情况下,这种特殊的近似值非常好......
  • 我将更新答案以包含此信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 2013-01-05
  • 2023-03-17
  • 2022-10-02
相关资源
最近更新 更多