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

时间:2011-11-01 12:36:59

标签: c# javascript

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

6 个答案:

答案 0 :(得分:102)

如果您想将DateTime对象转换为通用标记,请使用以下代码段:

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

一毫秒内有10000个刻度。并且在1970年1月的1 st 和1 st 之间的621.355.968.000.000.000蜱。

答案 1 :(得分:48)

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);

答案 2 :(得分:29)

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

var ticks = someDate.getTime();

MDN documentation开始,返回的值为

  

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

答案 3 :(得分:6)

扩展已接受的答案,为何添加635646076777520000

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

在.NET(Remarks部分下的source

  

DateTime值类型表示日期和时间,值范围为00:00:00(午夜),1月1日,0001 Anno Domini(Common Era)至11:59:59 PM,12月31日,9999 AD(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 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;

现在,在.NET中

 Console.Write(new DateTime(netTicks))
 // output current time

答案 4 :(得分:5)

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

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

我使用Skeikh的解决方案并减去#t; offset'。

答案 5 :(得分: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);
}