dart - Dart : 显示直到下一次的时间
问题描述
如何显示倒计时持续时间直到下一个警报
代码:
TimeOfDay _nextSalah(List<SalahModel> salahs) {
DateTime now = DateTime.now();
List<TimeOfDay> times = [];
int currentSalah;
salahs.forEach((s) => times.add(s.time));
times.add(TimeOfDay(hour: now.hour, minute: now.minute));
times.sort((a, b) => a.hour.compareTo(b.hour));
currentSalah = times.indexWhere((time) => time.hour == now.hour);
return TimeOfDay(hour: times[currentSalah].hour, minute: times[currentSalah].minute);
}
但是时差是错误的,它没有动画。另外,如何确保时差在同一天和第二天的时间起作用,即现在是 12 月 1 日下午 2:30,我想在 12 月 2 日上午 6:15 获得时差。
解决方案
它不起作用,因为TimeOfDay代表一天中的某个时间,与当天可能落在的日期或时区无关。时间仅用小时和分钟表示。
如果您想要跨多天的倒计时,DateTime
则必须使用时差评估,然后在格式化结果字符串之前进行一些数学运算,例如:
String nextTime(DateTime nextAlarmTime) {
List<int> ctime = [0, 0, 0, 0];
DateTime now = DateTime.now();
int diff = nextAlarmTime.difference(now).inSeconds;
ctime[0] = diff ~/ (24 * 60 * 60); // days
diff -= ctime[0] * 24 * 60 * 60;
ctime[1] = diff ~/ (60 * 60); // hours
diff -= ctime[1] * 60 * 60;
ctime[2] = diff ~/ 60; // minutes
ctime[3] = diff - ctime[2] * 60; // seconds
return ctime.map((val) => val.toString().padLeft(2, '0')).join(':');
}
推荐阅读
- matlab - 如何连接向量形成矩阵并用零填充
- c# - 如果经过身份验证的用户属于指定角色,为什么授权角色属性会拒绝访问?
- javascript - ASP.NET MVC 如何在 javascript 中获取选定对象的某些字段?
- c# - 如何处理无法访问的 ADFS 元数据
- java - 如何从主类调用一个方法到另一个活动
- php - 不同数组中键的值
- javascript - 来自 JSON 的 DOM 表
- webrtc - WebRTC replaceTrack,getStats不返回audioInputLevel
- javascript - document.getElementsByName("q1").disabled = true 不工作
- javascript - 即使单击标签区域,引导程序默认表单输入也会打开。我该如何防止这种情况?