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


79

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


1
请记住,浏览器的日期/时间可以设置为任何时区,因此您的数据不会相对于服务器上的UTC。我通常通过将服务器的utcnow刻度(相对于1970年)注入刻度并存储该值与+new Date()页面开始之间的差异来进行补偿。然后,所有日期/时间都可以偏移该金额。然后,任何错误都将降至页面等待时间。
Gone Coding

Answers:


118

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

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

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


5
当您使用C#时,将获得刻度。有关JavaScript方式,请参见下面的pointy答案。
标记

我必须承认我不喜欢它,但是它可以起作用:(
Milton

1
增加的数字对我不起作用,它总是给我时间:前一天21:00,但是这个(621356076000000000)工作正常,任何想法吗?
MuniR

在Google Chrome 56.0.2924.87(64位)中,正确的值是(621356076000000000),那么这两个值之间有什么区别?
okarpov

您的答案是哪种编程语言-c#或JavaScript?即,这在哪里实现?
barrypicker

55

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

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

您可以Date按如下方式将JavaScript对象转换为.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);

1
我喜欢这个答案作为解释。谢谢!
Pawel Cioch '16

4
(621355968e9 + (new Date()).getTime() * 1e4)一旦了解,就可以将这4条线压缩下来。大分享@LukeH
SliverNinja-MSFT

38

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

var ticks = someDate.getTime();

MDN文档中,返回值是

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


12
!蜱=毫秒,因此在C#中的单个刻度代表一个几百纳秒
AMD公司

11

扩展接受的答案,635646076777520000并添加原因。

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

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

DateTime值类型表示日期和时间,其值在公历时间范围是0001 Anno Domini(公共时代)从00:00:00(午夜)到9999年12月31日下午11:59:59(公历)。日历。

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

6

JavaScript中的日期也包含偏移量。如果您需要摆脱它,请使用以下命令:

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

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


2

那应该是date.GetTime()。请注意,C#和Javascript使用不同的初始日期,因此请使用类似这样的方式将其转换为C#DateTime。

public static DateTime GetDateTime(long jsSeconds)
{
    DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0);
    return unixEpoch.AddSeconds(jsSeconds);
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.