
今天分享一个有关倒计时的经验之谈。
通常后台给我们的是一个时间戳,然后我们根据这个时间戳与当前时间戳的差值,计算 天、时、分、秒,如下图所示:

但是,我想的是,能否不通过计算直接获取到需要的 天、时、分、秒,首先我想到的 DateTime
,DateTime
提供了相关接口可以直接拿到 天、时、分、秒:
void _test() {
var now = DateTime.now();
print(now.day);
print(now.hour);
print(now.minute);
print(now.second);
}
那么现在问题就变成了:如何将时间差转化为 DateTime
?
很遗憾我找了一阵也没找到相关的 api,所以最终只能自己算了。鉴于此功能比较常用,因此我简单封装了一下:
给 Duration
写了一个扩展:
extension RestTimeOnDuration on Duration {
int get inDaysRest => inDays;
int get inHoursRest => inHours - (inDays * 24);
int get inMinutesRest => inMinutes - (inHours * 60);
int get inSecondsRest => inSeconds - (inMinutes * 60);
int get inMillisecondsRest => inMilliseconds - (inSeconds * 1000);
int get inMicrosecondsRest => inMicroseconds - (inMilliseconds * 1000);
}
void main() {
const duration = Duration(seconds: 123);
print('Days: ${duration.inDaysRest}'); // 0
print('Hours: ${duration.inHoursRest}'); // 0
print('Minutes: ${duration.inMinutesRest}'); // 2
print('Seconds: ${duration.inSecondsRest}'); // 3
print('Milliseconds: ${duration.inMillisecondsRest}'); // 0
print('Microseconds: ${duration.inMicrosecondsRest}'); // 0
}
这样用起来就极其方便了。
学废了吗?
关注我,干货不断!
网友评论