2011-05-03 4 views
0

모두!DateTime 서버와 클라이언트 간의 차이

문제 : 클라이언트 날짜 시간 및 서버의 날짜 시간의 차이를 계산해야 내 ASP.NET MVC 프로젝트에서 시간과 다음 문제를 해결하고있다. 나는 자바 스크립트 함수를 가지고 있는데, timeStamp 매개 변수 = getNow()와 함께 서버 (Ajax 쿼리)에 서버 (DateController)에 코드가있다.

 .... 
    var clientMs = long.Parse(Request.QueryString["t"]); 
    var dt1970 = new DateTime(1970, 1, 1, 0, 0, 0); 
    var msFrom1970 = (DateTime.Now - dt1970).TotalMilliseconds 
      +(DateTime.UtcNow - DateTime.Now).TotalMilliseconds; 
    var timeOffset = msFrom1970 -clientMs; 

    return new JsonResult 
     { 
      JsonRequestBehavior = JsonRequestBehavior.AllowGet, 
      Data = new { responseText = timeOffset.ToString() 
     }; 
    } 

그러나 타임 오프셋이 잘못 계산됩니다

getNow: function() { 
     var date = new Date(); 
     return (date.getTime() + (date.getTimezoneOffset() * 60000)); 
    } 

다음, 서버 측에서 내가있는 내가 밀리 초 단위로 날짜 차이를 계산해야 DateController 있습니다. 작은 콘솔 앱에서이 논리를 확인하려고합니다.

class Program 
{ 
    static void Main(string[] args) 
    { 
     var clientMs = 1304411645875; 
     //value of clientMs I get from javaScript by using page 
     //http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_gettime 
     //with this script 
     /* 
     <HTML> 
     <body> 
      <script type="text/javascript"> 
      var d=new Date(); 
      document.write(d.getTime()); 
      </script> 
      </body> 
     </HTML> 
     */ 



     var dt1970 = new DateTime(1970, 1, 1, 0, 0, 0); 
     var msFrom1970 = (DateTime.Now - dt1970).TotalMilliseconds 
      +(DateTime.UtcNow - DateTime.Now).TotalMilliseconds; 
     Console.WriteLine(msFrom1970); 
     Console.ReadLine(); 
    } 
} 

차이는 약 시간입니다. 내 실수 나 다른 문제가 발생했음을 누군가가 알 수 있습니까?

+0


는 뜻 "차이"를합니까? – jackJoe

+0

예. 철자에 대해 죄송합니다. 나는 그것을 고쳤습니다. – Roman

답변

1

0보다 큰 당신은 C#을 최신 자바 스크립트 날짜를 변환과 사투를 벌인 것으로 보인다.

getNow: function() { 
    var date = new Date(); 
    return date.getUTCMilliseconds(); 
} 

하고 :

[업데이트] 후 getUTCMilliseconds()는
사용, 서버에이 기능을 밀리 초 단위로 날짜를 전달하려면 날짜의 밀리 초 부분 [/ 업데이트]를 반환 .NET에서 날짜 시간에 UTC의 밀리 세컨드의 값을 변환 : 당신이 누락 된 것으로 보인다 무엇

// Convert UTC milliseconds to System.DateTime 
DateTime dtClient = new DateTime((millisecondsClient * TimeSpan.TicksPerMillisecond) + 621355968000000000); 

// Test if this conversion is correct: 
TimeSpan offset = DateTime.UtcNow - dtClient; 

틱 밀리 초 변환입니다.

참고 : http://www.w3schools.com/jsref/jsref_getUTCMilliseconds.asp
http://twit88.com/blog/2011/01/23/net-datetime-from-milliseconds/

+0

아마 제 문제를 정확하게 설명하지 않았을 수 있습니다. – Roman

+0

하지만 서버와 클라이언트 날짜 - 시간의 총 차이 **를 밀리 초 단위로 계산해야합니다. 예 :'3 may 2011 14:12:10 - 4 may may 2011 02:00:10 = -11 : 48 : 00 = -42480000 milliseconds' – Roman

+0

감사합니다. – Roman

0

일광 절약 시간은 주어진 로케일에 대해서도 함수의 getTimezoneOffset() 반환 값이 상수가되지 않도록합니다.

0

아마 DateTime.NowDateTime.UtcNow(DateTime.UtcNow - DateTime.Now).TotalMilliseconds 반환

+0

DateTime.UtcNow - DateTime.Now는 0보다 작을 수 있습니다. – Roman