在Javascript中将C#的FileTimeUTC编号转换为Date

时间:2014-06-12 14:53:56

标签: javascript date date-conversion

我正在使用UTC字符串(130459385299470000)我需要将此转换为某些东西,例如2014年5月5日星期四15:17:00在Javascript中。

对此的任何帮助将不胜感激。

由于

RFD

2 个答案:

答案 0 :(得分:5)

您必须与之抗衡:

  • Windows文件时间使用1601年1月1日的纪元.Java Date使用1970年1月1日。您需要相应地调整该值。

  • Windows文件时间使用" ticks",每个为100纳秒。 JavaScript Date使用毫秒。所以精确度会下降。

  • Windows文件时间可能不代表UTC。它可能代表某个当地时区的时间。您必须了解源上下文才能知道该值是否实际为UTC。如果不是,那么您必须对其进行调整。

  • JavaScript Date基于UTC,但会根据运行代码的计算机的本地时区呈现它的输出。这通常是最终用户的网络浏览器。您可以使用像moment.js这样的库将其呈现为UTC,如果这是您想要的行为。

  • 由于所有JavaScript编号都是IEEE浮点数,因此当您开始使用较大的值时,可能会出现舍入错误。这可以通过截断字符串而不是分割来避免。

    var s = "130459385299470000";
    var t = +s.substring(0, s.length-4);
    var e = Date.UTC(1601,0,1);
    var dt = new Date(e + t);
    

当然,最好的办法是首先将它转换为C#代码中的ISO8601时间戳,而不是传递文件时间。

答案 1 :(得分:0)

将字符串转换为数字,数字从微秒到毫秒,并根据UTC时间创建JS Date对象:

var st = "130459385299470000";
var dt = new Date(parseInt(st, 10) / 1000);