【问题标题】:date countdown in dart飞镖中的日期倒计时
【发布时间】:2019-03-27 09:42:06
【问题描述】:

我正在尝试在我拥有的特定日期创建倒计时,并显示在那之前还剩多少小时、分钟和秒..

例如,我想将计数器日期设置为:2018 年 10 月 25 日星期四上午 7:14:05

我想为用户显示.. 剩余时间:hh:mm:ss 到 10 月 25 日...

我试过这个:

@override
void initState() {

new CountdownTimer(new Duration(milliseconds: 1540451645), new Duration(seconds: 1)).listen((data) {
  print('Remaining time: ${data.remaining.inSeconds}');
  print(new DateTime.now().millisecondsSinceEpoch);
  print(DateTime.fromMillisecondsSinceEpoch(data.remaining.inSeconds));
  var format = new DateFormat("hh:mm:ss");
  var dateString = format.format(DateTime.fromMillisecondsSinceEpoch(data.remaining.inSeconds));
  print(dateString);
});
super.initState();
}

但结果是:03:25:40.. 这真的不是真的...

如何做到这一点?

【问题讨论】:

  • 更新答案 - 添加了显示倒计时的工作代码
  • 你检查你的代码了吗?找到问题了吗?
  • @AndreyTurkovsky 仍然没有尝试您更新的答案.. 会尝试并让您知道
  • 所以,已经过去了一个多月。当您不需要答案时,我不明白提出问题的原因。只是复制粘贴代码进行检查有那么难吗?

标签: dart flutter


【解决方案1】:

首先 - 有错误:你必须使用data.remaining.inMilliseconds 而不是data.remaining.inSeconds

对于格式化,最好使用 Duration 而不是 DateTime。但是您可以更改现有代码,例如:

var format = new DateFormat("mm:ss");
var dateString = '${data.remaining.inHours}:${format.format(DateTime.fromMillisecondsSinceEpoch(data.remaining.inMilliseconds))};
print(dateString);

UPD 显示剩余时间的小部件

int estimateTs = DateTime(2018, 11, 5, 7, 15, 30).millisecondsSinceEpoch; // set needed date

....

StreamBuilder(
                      stream: Stream.periodic(Duration(seconds: 1), (i) => i),
                      builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
                        DateFormat format = DateFormat("mm:ss");
                        int now = DateTime
                            .now()
                            .millisecondsSinceEpoch;
                        Duration remaining = Duration(milliseconds: estimateTs - now);
                        var dateString = '${remaining.inHours}:${format.format(
                            DateTime.fromMillisecondsSinceEpoch(remaining.inMilliseconds))}';
                        print(dateString);
                        return Container(color: Colors.greenAccent.withOpacity(0.3),
                          alignment: Alignment.center,
                          child: Text(dateString),);
                      });

【讨论】:

  • 试了一下,结果:427:54:07.. 表示还剩 427 小时?还有 54 分钟?
  • 是的。我以为这就是你想要的
  • 是的,这正是我想要的 .. 但是从今天到 25 婴儿床只有 2 天了 .. 427 真的是一个巨大的数字吗?
  • 所以,检查你的代码。 1540451645 是什么?您在哪里将 10 月 25 日设置为计时器结束?
  • 你问“剩余时间:hh:mm:ss”,你没有说天。将"mm:ss" 更改为"hh:mm:ss"inHours 更改为inDays
【解决方案2】:

你认识乔哈吗?你编写了复杂的代码 joha 正在编写复杂的东西,

使用这个功能:

var timeleft = TimeNow.difference(nextday);

此函数将为您提供 2 DateTime 的剩余时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多