服务器和客户端之间的日期时间差异
everyone! 我在ASP.NET MVC项目中解决了下一个问题:服务器和客户端之间的日期时间差异
问题:需要计算客户端DateTime和服务器DateTime之间的差异。 我有javascript函数,它使用timeStamp参数= getNow()对服务器(DateController)执行Ajax查询,其代码如下。
getNow: function() {
var date = new Date();
return (date.getTime() + (date.getTimezoneOffset() * 60000));
}
接下来,在服务器端我有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()
};
}
但timeOffset计算错误。我尝试在小控制台应用程序中检查此逻辑:
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();
}
}
差异是大约小时。 有人可以告诉我我的错误或问题是由别的东西发生的吗?
更大的你似乎有一个JavaScript日期转换为C#日期挣扎。
[更新] getUTCMilliseconds()只返回日期的毫秒部分[/更新]
为了通过以毫秒为单位的时间给服务器,使用此功能:
getNow: function() {
var date = new Date();
return date.getUTCMilliseconds();
}
并以UTC毫秒这个值转换为DateTime在.NET:
// 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/
夏时制时间可以防止函数的getTimezoneOffset()从一个常量返回,即使对于给定的语言环境。
也许DateTime.Now
比DateTime.UtcNow
和(DateTime.UtcNow - DateTime.Now).TotalMilliseconds
返回0
DateTime.UtcNow - DateTime.Now可以小于0. – Roman 2011-05-03 10:22:30
你的意思是 “差异化”? – jackJoe 2011-05-03 09:45:34
是的。对不起拼写,我纠正了它。 – Roman 2011-05-03 09:52:18