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

IT技术 c# javascript
2021-02-27 11:35:49

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

6个回答

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

var ticks = ((yourDateObject.getTime() * 10000) + 621355968000000000);

一毫秒有 10000 个滴答声。和1之间621.355.968.000.000.000蜱ST一月0001 11970年1月。

当您使用 C# 时,这会得到滴答声。有关 javascript 方式,请参阅下面的尖点答案。
2021-04-21 11:35:49
你的答案是什么编程语言——c# 还是 JavaScript?即,这是在哪里实现的?
2021-04-27 11:35:49
添加的号码对我不起作用,它总是给我时间:前一天 21:00,但是这个 (621356076000000000) 工作正常,有什么想法吗??
2021-05-01 11:35:49
在 Google Chrome 56.0.2924.87 (64-bit) 中正确的值是 (621356076000000000),那么这两个值有什么区别呢?
2021-05-05 11:35:49
@muniR 我认为这是因为您混合了 UTC 和本地时间。621355968000000000 是 UTC。您的电话号码 621356076000000000 将适用于您的当地时间(您所在的时区比 UTC 时间晚 3 小时)
2021-05-11 11:35:49

JavaScriptDate类型的起源是 Unix 纪元:1970 年 1 月 1 日午夜。

.NETDateTime类型的起源是 0001 年 1 月 1 日午夜。

您可以将 JavaScriptDate对象转换为 .NET 刻度,如下所示:

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);
(621355968e9 + (new Date()).getTime() * 1e4)一旦你有了理解,就把这 4 行浓缩下来。很棒的分享@LukeH
2021-04-16 11:35:49

如果“滴答”的意思是“自纪元以来的毫秒数”,则可以调用“.getTime()”。

var ticks = someDate.getTime();

MDN 文档中,返回的值是

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

ticks != milliseconds ,所以在 C# 中,一个滴答声代表一百纳秒
2021-05-05 11:35:49

扩展已接受的答案,因为635646076777520000添加了原因

Javascriptnew Date().getTime() or Date.now()将返回从midnight of January 1, 1970.

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

DateTime 值类型表示日期和时间,其值范围从 0001 年 1 月 1 日 Anno Domini(共同时代)到 11:59:59 PM,公元 9999 年 12 月 31 日(CE)在公历中日历。

621355968000000000是从midnight Jan 1 01 CE的刻度值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 中的日期也包含偏移量。如果您需要摆脱它,请使用以下方法:

return ((date.getTime() * 10000) + 621355968000000000) - (date.getTimezoneOffset() * 600000000);

我使用 Skeikh 的解决方案并减去“偏移量”的刻度。

谢谢,节省了我的时间,因为我一直在寻找微小的差异!
2021-05-05 11:35:49