如何将JavaScript日期对象转换为刻度

Tal*_*lha 72 javascript c#

我应该如何将JavaScript日期对象转换为刻度?我希望在同步数据后使用刻度来获取C#应用程序的确切日期.

小智 107

如果要将DateTime对象转换为通用刻度,请使用以下代码段:

var ticks = ((yourDateObject.getTime() * 10000) + 621355968000000000);
Run Code Online (Sandbox Code Playgroud)

一毫秒内有10000个刻度.和1之间621.355.968.000.000.000蜱ST一月0001 1 1970年1月.

  • 当你在C#时,这会得到滴答声.有关javascript方式,请参阅下面的尖尖答案. (4认同)
  • 添加的号码对我不起作用,它总是给我时间:前一天 21:00,但是这个 (621356076000000000) 工作正常,有什么想法吗?? (2认同)

Luk*_*keH 50

JavaScript Date类型的起源是Unix时代:1970年1月1日午夜.

.NET DateTime类型的来源是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);
Run Code Online (Sandbox Code Playgroud)

  • 一旦理解,`(621355968e9 +(new Date())。getTime()* 1e4)`会压缩这4行。大分享@LukeH (2认同)

Poi*_*nty 33

如果用"ticks"表示"自纪元以来毫秒"这样的东西,你可以调用".getTime()".

var ticks = someDate.getTime();
Run Code Online (Sandbox Code Playgroud)

MDN文档中,返回的值是

整数值,表示自1970年1月1日00:00:00 UTC(Unix Epoch)以来的毫秒数.

  • ticks!=毫秒,所以在C#中,单个刻度表示一百纳秒 (12认同)

Sam*_*ami 8

扩展已接受的答案为什么635646076777520000被添加.

Javascript new Date().getTime() or Date.now()将返回传递的毫秒数midnight of January 1, 1970.

在.NET中(部分下的源代码Remarks)

DateTime值类型表示日期和时间,其值为00:00:00(午夜),1月1日,0001 Anno Domini(Common Era)到11:59:59 PM,12999年12月31日,公元9999年(CE)在Gregorian日历.

621355968000000000是蜱从值midnight Jan 1 01 CEmidnight Jan 1 1970

所以,在.NET中

  Console.Write(new DateTime(621355968000000000))
  // output 1/1/1970 12:00:00 AM
Run Code Online (Sandbox Code Playgroud)

因此将javascript时间转换为.Net ticks

 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;
Run Code Online (Sandbox Code Playgroud)

现在,在.NET中

 Console.Write(new DateTime(netTicks))
 // output current time
Run Code Online (Sandbox Code Playgroud)


mic*_*czy 5

JavaScript中的日期也包含偏移量.如果你需要摆脱它使用以下:

return ((date.getTime() * 10000) + 621355968000000000) - (date.getTimezoneOffset() * 600000000);
Run Code Online (Sandbox Code Playgroud)

我使用Skeikh的解决方案并减去'offset'的刻度.