我正在做一个项目,想把日期时间的差异按分钟、小时、天、周、月和年来计算,我可以把分钟增加到天。
DateTime.now().difference(DateTime(2019, 10, 7)).inDays
但是我花了几个星期,几个月和几年的时间才创造出来,我怎么能这样做呢,请帮助
hzbexzde1#
我构建了一个名为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
wpx232ag2#
有一种非常简单易行的方法可以做到这一点,并且只需要很少的日期/时间算术知识。只需比较两个DateTimes的微秒自历元值:
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四舍五入;如果〈1,则显示月份。年:将天数除以365.25和下限,并显示以12为模的月份。
nue99wik3#
你可以手动计算月份差异大小(不使用任何packege):
static int getMonthSizeBetweenDates(DateTime initialDate, DateTime endDate){ return calculateMonthSize(endDate)-calculateMonthSize(initialDate)+1; } static int calculateMonthSize(DateTime dateTime){ return dateTime.year*12+dateTime.month; }
getMonthSizeBetweenDates方法提供初始日期和结束日期之间的月份数。例如:你的初始日期是1.1.2022,你的结束日期是1.3.2022。那么这个方法返回3(January,Fabruary和March)你可以用这个逻辑找到周和年的差异。另一种方法:
static int getMonthSizeBetweenDates2(DateTime initialDate, DateTime endDate){ return (endDate.year-initialDate.year)*12+(endDate.month-initialDate.month)+1; }
e4yzc0pl4#
为了增强AKushWarrior提供的答案,你可以创建一个这样的帮助函数,并在任何需要的地方使用它。它是一个静态函数,所以你甚至不需要示例。
static String calculateTime(DateTime time) { Duration compare(DateTime x, DateTime y) { return Duration(microseconds: (x.microsecondsSinceEpoch - y.microsecondsSinceEpoch).abs()); } DateTime x = DateTime.now(); DateTime y = time; Duration diff = compare(x,y); int days = diff.inDays; int hours = diff.inHours; int minutes = diff.inMinutes; String result = ''; if(days > 365){ result = '${(days/365).floor().toString()} Year(s)'; } else if(days > 30){ result = '${(days/30).floor().toString()} Month(s)'; } else if(days > 7){ result = '${(days/7).floor().toString()} Week(s)'; } else if(days > 1){ result = '${(days/1).floor().toString()} Day(s)'; } else if(hours > 1){ result = '$hours Hour(s)'; } else if(minutes > 1){ result = '$minutes Minute(s)'; } else{ result = 'Now'; } return result;
}
4条答案
按热度按时间hzbexzde1#
我构建了一个名为Jiffy的包来帮助我
wpx232ag2#
有一种非常简单易行的方法可以做到这一点,并且只需要很少的日期/时间算术知识。
只需比较两个DateTimes的微秒自历元值:
上面的代码可以工作,而且比检查闰年和基于时间的异常更有效。
为了得到更大的单位,我们可以进行近似计算,大多数最终用户对这种一般近似值都很满意:
周:天数除以7,四舍五入。
月:天数除以30.44四舍五入;如果〈1,则显示月份。
年:将天数除以365.25和下限,并显示以12为模的月份。
nue99wik3#
你可以手动计算月份差异大小(不使用任何packege):
getMonthSizeBetweenDates方法提供初始日期和结束日期之间的月份数。例如:你的初始日期是1.1.2022,你的结束日期是1.3.2022。那么这个方法返回3(January,Fabruary和March)
你可以用这个逻辑找到周和年的差异。
另一种方法:
e4yzc0pl4#
为了增强AKushWarrior提供的答案,你可以创建一个这样的帮助函数,并在任何需要的地方使用它。它是一个静态函数,所以你甚至不需要示例。
}