为什么我不能将毫秒从C#转换为JavaScript日期对象?

时间:2012-03-01 19:58:07

标签: javascript .net date

我在.net中编写了一个返回日期的函数。我需要将该日期转换为JavaScript中的日期对象。

根据https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date,我应该可以调用new Date(x),其中x是我约会时的毫秒数。

因此,我在我的ASP.net MVC 3代码中写了以下内容:

ViewBag.x = new TimeSpan(someDate.Ticks).TotalMilliseconds;

然后,在JavaScript中,我得到以下代码:

new Date( 63461023004794 )

所代表的日期应为2012年1月1日。

但是,JavaScript读取的日期是12月31日,3980。

这里出了什么问题?

5 个答案:

答案 0 :(得分:7)

您的.NET代码为您提供自0001年1月1日以来的毫秒数。

JavaScript构造函数采用自1970年1月1日以来的毫秒数。

最简单的方法可能是将您的.NET代码更改为:

ViewBag.x = (someDate - new DateTime(1970, 1, 1)).TotalMilliseconds;

答案 1 :(得分:3)

someDate.Ticks自1月1日起测量 st ,0001。

Javascript日期自1月1日 st 1970 ,UTC后的毫秒数。

答案 2 :(得分:1)

这是因为自{0001} 01以来DateTime结构计数滴答,而Date对象计算自1970-01-01以来的毫秒数。

将1970-01-01的差异视为毫秒:

ViewBag.x = (someDate - new DateTime(1970, 1, 1)).TotalMilliseconds;

答案 3 :(得分:0)

Unix日历的纪元是1970-01-01 00:00:00 UTC。假设你的时间已经是UTC(不是给定的):

DateTime someDate   = GetSomeDate() ;
DateTime UNIX_EPOCH = new DateTime(1970,1,1) ;
Timespan ts         = someDate - UNIX_EPOCH ;

应该做你。然后传递javascript,TimeSpan的TotalMilliseconds属性。

答案 4 :(得分:0)

规则:

  自C# Ticks以来的

0001-01-01措施。

     

Javascript dates1970-01-01, UTC开始需要几毫秒。

然后您需要从2665800000 C#变量(DateTime)中减去someDate毫秒

  

2665800000是一个const 1970-01-010001-01-01之间的差异为毫秒

使用:

ViewBag.x = (someDate - new DateTime(2665800000)).TotalMilliseconds;