Как правильно отформатировать TimeSpan в качестве таймера обратного отсчета? - PullRequest
1 голос
/ 10 августа 2010

У меня есть таймер, который работает на веб-сайте.Он будет извлекать промежуток времени, в течение которого у пользователя остается время до истечения срока действия его заказа.По большей части это работает нормально, сервер вернет начальное оставшееся время, а 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, то он просто возвращает <code>new TimeSpan(0), поэтому он никогда не должен идти отрицательным.Это не javascript, который мешает обратному отсчету, потому что я могу отключить его и все еще видеть испорченное отформатированное время.

Есть ли лучший / более чистый способ сделать это?

1 Ответ

4 голосов
/ 10 августа 2010

Одна ошибка, которую я вижу, это то, что вы не должны вычитать ее здесь:

TimeRemaining.TotalMinutes - 1

Если осталось менее тридцати секунд, и вы вычли одну минуту, вы получите отрицательное число.

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

Результат:

-1

Вместо этого вы должны округлить это число до целого числа (также называемого усечением).Вы можете сделать это с помощью Math.Floor , но также можно просто привести число к целому числу для достижения того же эффекта:

(int)TimeRemaining.TotalMinutes

Что касается секунд, я надеваюне знаю, почему это идет не так.Я предполагаю, что это потому, что ваше оставшееся время на самом деле может стать отрицательным.Кажется, что ошибка не в том коде, который вы разместили.

...