bool isAdult2(String birthDateString) {
String datePattern = "dd-MM-yyyy";
// Current time - at this moment
DateTime today = DateTime.now();
// Parsed date to check
DateTime birthDate = DateFormat(datePattern).parse(birthDateString);
// Date to check but moved 18 years ahead
DateTime adultDate = DateTime(
birthDate.year + 18,
birthDate.month,
birthDate.day,
);
return adultDate.isBefore(today);
}
if (DateTime.now().difference(date) < Duration(days: 6570)) {
EasyLoading.showError('You should be 18 years old to register');}
else {
store.changeBirthday(date);}
8条答案
按热度按时间n3h0vuf21#
Package
要轻松解析日期,我们需要包
intl
:https://pub.dev/packages/intl#-installing-tab-
因此,将此依赖项添加到您的
pubspec.yaml
文件(以及get
新依赖项)溶液#1
您可以简单地比较年份:
但这并不总是正确的,因为到今年年底,你是“不成年人”。
溶液#2
因此,更好的解决办法是将出生日提前18天,并与当前日期进行比较。
bz4sfanl2#
我所提出的最好的年龄验证是基于Regex的。
以下逻辑涵盖了所有与断点相关的年龄。
产出
希望你会觉得这个有用。:)
atmip9wb3#
您可以使用扩展添加一个函数,以检查DateTime。例如:
值得注意的是,这并不需要
intl
或任何其他外部封装。粘贴到dartpad.dev的权利,以测试出来。v440hwme4#
你可以用下面的方法找出年差。
bejyjqdl5#
798qvoo86#
如果你使用的是intl包,这是非常简单的。确保你已经为你的日期选择器和你验证年龄的函数设置了相同的格式。
您可以使用以下代码计算当天日期与输入日期之间的差值:
您可以在函数的返回值上创建一个条件,如下所示:
bvjveswy7#
18年有6570天,所以我创建了一个简单的操作来检查输入的日期与今天的日期相比是否大于6570天。
如果这是真的,则用户小于18岁,如果不是,则用户大于18岁。也在白天工作。
这是我的if块:
fumotvh38#
类似于@Broken的公认答案,但我认为这更具可读性。
DartPad https://dartpad.dev/?id=53885d812c90230f2a5b786e75b6cd82上的测试