2010-08-09 4 views
1

나는 웹 사이트에서 실행되는 타이머가 있습니다. 주문이 만료 될 때까지 사용자의 체류 시간을 검색합니다. 대부분의 경우이 작동합니다. 서버는 초기 시간을 반환하고 자바 스크립트는 카운트 다운을 수행합니다. 페이지가로드의 일부 (타이머가 남은 60 초 이내에있을 때 일어날 것)에 따라서는, 어떤 이유로TimeSpan을 카운트 다운 타이머로 포맷하는 올바른 방법은 무엇입니까?

2:302:292:28

그런 다음 표시 형식은

-1:0-45-1:0-46으로 변합니다

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

-1:0-47는 시간 범위를 포맷을 담당하는 코드입니다

같은 결과로 다음을 시도해 보았습니다. TotalSeconds이 < = 0이면

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

나는 또한 음의 안됩니다, 그래서 그때 그냥하는 new TimeSpan(0)를 반환의 timeRemaining으로에 체크를합니다. 그것은 자바 스크립트 그게 카운트 다운을 엉망이 아니에요, 나는 그것을 비활성화 할 수 있기 때문에 여전히 엉망으로 포맷 된 시간을 볼 수 있습니다.

더 좋은 방법/깨끗한 방법이 있습니까? 미만 남음 삼십초이

TimeRemaining.TotalMinutes - 1 

만약 당신이 음수를 얻을 것이다 일분을 빼기 : 내가 볼 수

답변

4

하나의 오류는 여기에 하나를 뺀되어서는 안된다는 것입니다.

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

결과 :

-1 

가 대신 정수 (또한 절단)까지이 숫자를 반올림합니다. 당신은 Math.Floor이 작업을 수행 할 수 있지만, 단지 같은 효과를 달성하기 위해 정수로 수를 캐스팅하는 것도 가능합니다 : 그 잘못가는 이유

(int)TimeRemaining.TotalMinutes 

은 초에 관해서는, 나도 몰라합니다. 나는 네 남은 시간이 실제로 부정적이 될 수 있다고 생각한다. 오류가 게시 된 코드에없는 것 같습니다.

+0

남은 시간, 요일 등을 표시하지 않는 경우 TotalMinutes를 표시하는 것이 좋습니다. 그러나 나는 왜 그가 1을 빼는 지 이해하지 못합니다. 아마도 어떤 반올림 때문일 것입니다. 예를 들어 수학 일 것입니다. 바닥 도움? – dtb

+0

@dtb : 네, 맞습니다. –

+0

@Mark, TotalMinutes가 둥근 것처럼 보이기 때문에 내가 말할 수있는 것에서. 나머지 2 분으로 설정하면 TotalMinutes = 2, Seconds = 59로로드됩니다. 1:59 대신 2:59가됩니다. – Brandon