代码之家  ›  专栏  ›  技术社区  ›  Brandon

将TimeSpan格式化为倒计时计时器的正确方法是什么?

  •  1
  • Brandon  · 技术社区  · 14 年前

    我在网站上有个计时器。它将检索用户在订单到期前的时间跨度。在大多数情况下,这工作正常,服务器将返回初始剩余时间,javascript将进行倒计时。所以它显示出来了

    2:30 2:29 2:28

    然后由于某种原因,在一些页面加载(似乎是在计时器剩余时间不到60秒时发生的)时,格式将变为

    -1:0-45 -1:0-46 -1:0-47

    这是负责格式化时间跨度的代码:

    <%= (TimeRemaining.TotalMinutes - 1).ToString("N0") %>:<%= TimeRemaining.Seconds.ToString("N0").PadLeft(2,'0') %>
    

    <%= String.Format("{0:0}:{1:00}", TimeRemaining.TotalMinutes-1, TimeRemaining.Seconds)%>
    

    new TimeSpan(0) ,所以它永远不会变成负数。不是javascript搞砸了倒计时,因为我可以禁用它,但仍然可以看到格式混乱的时间。

    1 回复  |  直到 14 年前
        1
  •  4
  •   Mark Byers    14 年前

    我看到的一个错误是你不应该在这里减去一:

    TimeRemaining.TotalMinutes - 1
    

    TimeSpan timeRemaining = TimeSpan.FromSeconds(25);
    string s = (timeRemaining.TotalMinutes - 1).ToString("N0");
    Console.WriteLine(s);
    

    结果:

    -1
    

    相反,您应该将此数字向下舍入为整数(也称为截断)。你可以这样做 Math.Floor ,但也可以将数字转换为整数,以实现相同的效果:

    (int)TimeRemaining.TotalMinutes
    

    至于秒,我不知道为什么会出错。我想这是因为你剩下的时间实际上会变成负数。错误似乎不在您发布的代码中。