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

Posted

技术标签:

【中文标题】如何将 JavaScript 日期对象转换为刻度【英文标题】:How to convert JavaScript date object to ticks 【发布时间】:2011-12-19 11:24:19 【问题描述】:

我应该?我想在数据同步后使用刻度来获取我的 C# 应用程序的确切日期。

【问题讨论】:

请记住,浏览器的日期/时间可以设置为任何时区,因此您的数据不会与服务器上的 UTC 相关。我通常通过将服务器的 utcnow 以刻度(相对于 1970 年)注入页面并在页面开始时存储该值与 +new Date() 之间的差异来进行补偿。然后所有日期/时间都可以抵消该数量。任何错误都会归结为页面延迟。 【参考方案1】:

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

var ticks = someDate.getTime();

从MDN documentation,返回值为一个

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

【讨论】:

ticks != milliseconds ,所以在 C# 中,一个 tick 代表一百纳秒【参考方案2】:

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

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

您可以将 JavaScript Date 对象转换为 .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【参考方案3】:

应该是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);

【讨论】:

【参考方案4】:

如果您想将您的DateTime 对象转换为通用刻度,请使用以下代码 sn-p:

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

一毫秒有 10000 个滴答声。在 0001 年 1 月 1st 到 1970 年 1 月 1st 之间有 621.355.968.000.000.000 个滴答声。

【讨论】:

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

扩展已接受的答案作为添加 635646076777520000 的原因。

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

在 .NET 中(source 在Remarks 部分下)

DateTime 值类型表示日期和时间,其值范围从 0001 年 1 月 1 日 00:00:00(午夜)到公元 9999 年 12 月 31 日晚上 11:59:59(CE)在公历中。

621355968000000000 是从midnight Jan 1 01 CEmidnight 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 的解决方案并减去“偏移”的刻度。

【讨论】:

谢谢,节省了我的时间,因为我一直在寻找细微的差别!

以上是关于如何将 JavaScript 日期对象转换为刻度的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 XSLT 将刻度转换为可读的日期时间?

将unix时间戳转换为javascript日期对象[重复]

javascript基础学习

如何将JavaScript日期转换为UTC?

通过 Ajax 将 Javascript 日期转换为 C#

如何使用 JavaScript 中的格式规范将字符串转换为日期时间?