我有一个在网站上运行的计时器。它将检索用户在订单到期前的时间长度。在大多数情况下,这工作正常,服务器将返回剩余的初始时间,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)%>
我还检查了TimeRemaining,如果TotalSeconds是&lt; = 0,那么它只返回new TimeSpan(0)
,所以它永远不会变为负数。这不是javascript搞砸了倒计时,因为我可以禁用它并仍然看到混乱的格式化时间。
有更好/更清洁的方法吗?
答案 0 :(得分:4)
我可以看到的一个错误是你不应该在这里减去一个:
TimeRemaining.TotalMinutes - 1
如果剩余时间少于30秒,并且您减去一分钟,则会得到一个负数。
TimeSpan timeRemaining = TimeSpan.FromSeconds(25);
string s = (timeRemaining.TotalMinutes - 1).ToString("N0");
Console.WriteLine(s);
结果:
-1
相反,您应该将此数字向下舍入为整数(也称为截断)。您可以使用Math.Floor执行此操作,但也可以将数字转换为整数以实现相同的效果:
(int)TimeRemaining.TotalMinutes
关于秒,我不知道为什么会出错。我认为这是因为你的剩余时间实际上可能是消极的。错误似乎不在您发布的代码中。