我在.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。
这里出了什么问题?
答案 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 dates
从1970-01-01, UTC
开始需要几毫秒。
然后您需要从2665800000
C#
变量(DateTime
)中减去someDate
毫秒:
2665800000
是一个const :1970-01-01
和0001-01-01
之间的差异为毫秒
使用:
ViewBag.x = (someDate - new DateTime(2665800000)).TotalMilliseconds;