繁体   English   中英

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

[英]What is the proper way to format a TimeSpan as a countdown timer?

我有一个在网站上运行的计时器。 它将检索用户在订单到期前的时间长度。 在大多数情况下,这工作正常,服务器将返回剩余的初始时间,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 <= 0,那么它只返回一个new TimeSpan(0) ,所以它永远不会变为负数。 这不是javascript搞砸了倒计时,因为我可以禁用它并仍然看到混乱的格式化时间。

有没有更好/更清洁的方法来做到这一点?

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

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

至于秒,我不知道为什么会出错。 我认为这是因为你的剩余时间实际上可能是消极的。 错误似乎不在您发布的代码中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM