1

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

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

4

1 回答 1

4

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

TimeRemaining.TotalMinutes - 1

如果剩下不到三十秒,减去一分钟,你将得到一个负数。

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

结果:

-1

相反,您应该将此数字向下舍入为整数(也称为截断)。您可以使用Math.Floor执行此操作,但也可以将数字转换为整数以达到相同的效果:

(int)TimeRemaining.TotalMinutes

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

于 2010-08-09T21:29:31.527 回答