Dart 日期时间差异(以周、月和年为单位)

Jam*_*med 5 time datetime dart flutter

我正在开发一个项目,想要添加 DateTime 中分钟、小时、天、周、月和年的差异。我可以在几分钟到几天内完成。例如

DateTime.now().difference(DateTime(2019, 10, 7)).inDays
Run Code Online (Sandbox Code Playgroud)

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

Jam*_*med 6

我构建了一个包来帮助我解决这个问题,称为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
Run Code Online (Sandbox Code Playgroud)


emr*_*ntr 6

您可以手动计算月份差异大小(不使用任何包):

      static int getMonthSizeBetweenDates(DateTime initialDate, DateTime endDate){
    return calculateMonthSize(endDate)-calculateMonthSize(initialDate)+1;
  }

  static int calculateMonthSize(DateTime dateTime){
    return dateTime.year*12+dateTime.month;
  }
Run Code Online (Sandbox Code Playgroud)

getMonthSizeBetweenDates 方法可提供起始日期和结束日期之间的月份数。例如:您的初始日期是 2022 年 1 月 1 日,结束日期是 2022 年 3 月 1 日。那么这个方法返回 3(一月、十月和三月)

您可以使用此逻辑找到周和年的差异。

另一种方法:

static int getMonthSizeBetweenDates2(DateTime initialDate, DateTime endDate){
    return (endDate.year-initialDate.year)*12+(endDate.month-initialDate.month)+1;
  }
Run Code Online (Sandbox Code Playgroud)