Flutter - 如何在年、月和日中找到两个日期之间的差异?

Jai*_*eri 2 datetime date-difference dart flutter

我正在寻找一种方法来DateTime解析两个日期,以显示差异。我希望它的格式为:“X 年,Y 个月,Z 天”。

对于 JS,我们有momentjs库和以下代码::

var a = moment([2015, 11, 29]);
var b = moment([2007, 06, 27]);

var years = a.diff(b, 'year');
b.add(years, 'years');

var months = a.diff(b, 'months');
b.add(months, 'months');

var days = a.diff(b, 'days');

console.log(years + ' years ' + months + ' months ' + days + ' days');
// 8 years 5 months 2 days
Run Code Online (Sandbox Code Playgroud)

是否有类似的dart库可以帮助实现这个用例?

ret*_*oid 7

您正在寻找的是 Dart DateTime 类 您可以在 moment.js 中接近您想要的内容

main() {
  var a = DateTime.utc(2015, 11, 29);
  var b = DateTime.utc(2007, 06, 27);

  var years = a.difference(b);
  print(years.inDays ~/365);

}
Run Code Online (Sandbox Code Playgroud)

DateTime 没有 inYears 或 inMonths 选项,但这就​​是打印中划分年份的原因。差异函数以秒为单位返回差异,因此您必须自己处理几天。

  • 这实际上是最好的答案 (2认同)

Ale*_*sky 5

我认为使用 DateTime 无法轻松完成您想要的操作。因此,您可以使用https://pub.dev/packages/time_machine包,它在日期时间处理方面非常强大:

import 'package:time_machine/time_machine.dart';

void main() {
  LocalDate a = LocalDate.today();
  LocalDate b = LocalDate.dateTime(DateTime(2022, 1, 2));
  Period diff = b.periodSince(a);
  print("years: ${diff.years}; months: ${diff.months}; days: ${diff.days}");
}
Run Code Online (Sandbox Code Playgroud)

小时/分钟/秒精度:

import 'package:time_machine/time_machine.dart';

void main() {
  LocalDateTime a = LocalDateTime.now();
  LocalDateTime b = LocalDateTime.dateTime(DateTime(2022, 1, 2, 10, 15, 47));
  Period diff = b.periodSince(a);
  print("years: ${diff.years}; months: ${diff.months}; days: ${diff.days}; hours: ${diff.hours}; minutes: ${diff.minutes}; seconds: ${diff.seconds}");
}
Run Code Online (Sandbox Code Playgroud)


cam*_*777 3

您可以根据总天数计算:

void main() {
  DateTime a = DateTime(2015, 11, 29);
  DateTime b = DateTime(2007, 06, 27);
  int totalDays = a.difference(b).inDays;
  int years = totalDays ~/ 365;
  int months = (totalDays-years*365) ~/ 30;
  int days = totalDays-years*365-months*30;
  print("$years $months $days $totalDays");
}
Run Code Online (Sandbox Code Playgroud)

结果是:8 5 7 3077