如何将JavaScriptdate对象转换为刻度
我应该如何将JavaScriptdate对象转换为ticks? 我想在数据同步之后使用滴答来获取C#应用程序的确切date。
如果你想把你的date时间对象转换成通用的滴答,然后使用下面的代码片段
var ticks = ((yourDateObject.getTime() * 10000) + 621355968000000000);
从Ist 1900年1月到1970年1月,这里有
621355968000000000
时代的记号。这里10000是每毫秒的记号。
JavaScript Date
types的起源是Unix纪元:1970年1月1日午夜。
.NET DateTime
types的起源是0001年1月1日午夜。
您可以将JavaScript Date
对象转换为.NET ticks,如下所示:
var yourDate = new Date(); // for example // the number of .net ticks at the unix epoch var epochTicks = 621355968000000000; // there are 10000 .net ticks per millisecond var ticksPerMillisecond = 10000; // calculate the total number of .net ticks for your date var yourTicks = epochTicks + (yourDate.getTime() * ticksPerMillisecond);
如果通过“嘀嗒”表示类似于“自时代以来的毫秒”,则可以调用“.getTime()”。
var ticks = someDate.getTime();
从MDN文档中 ,返回值是
整数值表示自1970年1月1日00:00:00 UTC(Unix Epoch)以来的毫秒数。
为什么增加635646076777520000
为什么扩大接受的答案。
Javascript new Date().getTime() or Date.now()
将返回从midnight of January 1, 1970
传递的毫秒数。
在.NET中( 源代码在Remarks
部分)
DateTime值types表示date和时间,值从00:00:00(午夜),0001年1月1日Anno Domini(共同时代)到公元9999年12月31日11:59:59 PM(公历)日历。
621355968000000000
是从midnight Jan 1 01 CE
midnight Jan 1 1970
到midnight Jan 1 1970
的蜱的价值
所以,在.NET中
Console.Write(new DateTime(621355968000000000)) // output 1/1/1970 12:00:00 AM
因此,将JavaScript时间转换为.Net刻度
var currentTime = new Date().getTime(); // 10,000 ticks in 1 millisecond // jsTicks is number of ticks from midnight Jan 1, 1970 var jsTicks = currentTime * 10000; // add 621355968000000000 to jsTicks // netTicks is number of ticks from midnight Jan 1, 01 CE var netTicks = jsTicks + 621355968000000000;
现在,在.NET中
Console.Write(new DateTime(netTicks)) // output current time
JavaScript中的date还包含偏移量。 如果你需要摆脱它使用以下内容:
return ((date.getTime() * 10000) + 621355968000000000) - (date.getTimezoneOffset() * 600000000);
我使用Skeikh的解决scheme,并减去'抵消'的滴答声。
这应该是date.GetTime()
。 请注意,C#和JavaScript使用不同的初始date,所以使用这样的东西来转换为C#date时间。
public static DateTime GetDateTime(long jsSeconds) { DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0); return unixEpoch.AddSeconds(jsSeconds); }