我正在寻找一种使用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 ?
答案 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);
年日相同