如何将 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 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 的解决方案并减去“偏移”的刻度。
【讨论】:
谢谢,节省了我的时间,因为我一直在寻找细微的差别!以上是关于如何将 JavaScript 日期对象转换为刻度的主要内容,如果未能解决你的问题,请参考以下文章