为什么可以';我是否将毫秒从C#转换为JavaScript日期对象?
我在.net中编写了一个返回日期的函数。我需要将该日期输入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
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日期
自UTC1970-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;