为什么可以';我是否将毫秒从C#转换为JavaScript日期对象?

为什么可以';我是否将毫秒从C#转换为JavaScript日期对象?,javascript,.net,date,Javascript,.net,Date,我在.net中编写了一个返回日期的函数。我需要将该日期输入JavaScript中的日期对象 根据,我应该能够调用newdate(x),其中x是我的日期的毫秒数 因此,我在ASP.net MVC 3代码中编写了以下内容: ViewBag.x = new TimeSpan(someDate.Ticks).TotalMilliseconds; 然后,在JavaScript中,我得到以下代码: new Date( 63461023004794 ) 代表日期应为2012年1月1日 但是,JavaScr

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

根据,我应该能够调用
newdate(x)
,其中x是我的日期的毫秒数

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

ViewBag.x = new TimeSpan(someDate.Ticks).TotalMilliseconds;
然后,在JavaScript中,我得到以下代码:

new Date( 63461023004794 )
代表日期应为2012年1月1日

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


这里出了什么问题?

someDate.Ticks
是从0001年1月1日开始测量的


Javascript日期自UTC 1970年1月1日起以毫秒为单位。

您的.NET代码给出了自0001年1月1日起的毫秒数

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

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

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

这是因为
DateTime
结构统计0001-01-01以来的滴答声,而
Date
对象统计1970-01-01以来的毫秒数

将1970-01-01的差值取为毫秒:

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

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

我应该帮你。然后传递javascript,TimeSpan的
totalmillizes
属性。

规则:

C#Ticks
0001-01-01
以来的测量值

Javascript日期
自UTC
1970-01-01以来需要毫秒

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

2665800000
是一个常数:
1970-01-01
0001-01-01
之间的差异为毫秒

使用:


是的,自1970年1月1日起需要毫秒参考资料:日期时间结构的描述:
DateTime someDate   = GetSomeDate() ;
DateTime UNIX_EPOCH = new DateTime(1970,1,1) ;
Timespan ts         = someDate - UNIX_EPOCH ;
ViewBag.x = (someDate - new DateTime(2665800000)).TotalMilliseconds;