Flutter-如何找出年,月和日中两个日期之间的差异?

时间:2020-06-03 10:13:53

标签: datetime flutter dart date-difference

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

对于JS,我们有momentjs库和following code ::

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

是否有类似的库可用于 dart

7 个答案:

答案 0 :(得分:4)

我认为使用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}");
}

以小时/分钟/秒为单位的精度:

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}");
}

答案 1 :(得分:1)

您要寻找的是飞镖DateTime class 您可以通过

接近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);

}

日期时间没有inYears或inMonths选项,尽管这就是为什么在打印中划分年份的原因。 差异函数以秒为单位返回差异,因此您必须自己处理几天。

答案 2 :(得分:1)

您可以在工期类中编写扩展名以对其进行格式化:

extension DurationExtensions on Duration {
  String toYearsMonthsDaysString() {
    final years = this.inDays ~/ 365
    // You will need a custom logic for the months part, since not every month has 30 days
    final months = (this.inDays ~% 365) ~/ 30
    final days = (this.inDays ~% 365) ~% 30

    return "$years years $months months $days days";
  }
}

用法将是:

final date1 = DateTime()
final date2 = DateTime()
date1.difference(date2).toYearsMonthsDaysString()

答案 3 :(得分:1)

你可以像这样使用Jiffy Package

var jiffy1 = Jiffy("2008-10", "yyyy-MM");
var jiffy2 = Jiffy("2007-1", "yyyy-MM");

jiff1.diff(jiffy2, Units.YEAR); // 1
jiff1.diff(jiffy2, Units.YEAR, true);

答案 4 :(得分:-1)

DateTime a = DateTime(2015, 11, 29);
DateTime b = DateTime(2007, 06, 27);
int days = a.difference(b).inDays;

答案 5 :(得分:-1)

答案是肯定的,您可以使用Dart中的DateTime类轻松实现。参见:https://api.dart.dev/stable/2.8.3/dart-core/DateTime-class.html

示例

void main() {
  var moonLanding = DateTime(1969,07,20)
  var marsLanding = DateTime(2024,06,10);
  var diff = moonLanding.difference(marsLanding);

  print(diff.inDays.abs());
  print(diff.inMinutes.abs());
  print(diff.inHours.abs());
}

输出: 20049 28870560 481176

答案 6 :(得分:-1)

difHour = someDateTime.difference(DateTime.now()).inHours;
    difMin = (someDateTime.difference(DateTime.now()).inMinutes)-(difHour*60);

年日相同

相关问题