【问题标题】:How to get date ticks in a javaScript?如何在 JavaScript 中获取日期刻度?
【发布时间】:2018-08-09 18:50:34
【问题描述】:

我在C#中有这样的代码:

public static decimal StringDateToDecimal(this string stringDate)
{
    var cultureInfo = new CultureInfo("ru-Ru");
    var date = DateTime.Parse(stringDate, cultureInfo);
    var number = date.ToBinary();

    var unix = new DateTime(1970, 1, 1);
    var diff = (date - unix).Ticks;
    return (decimal)diff;
}

对于 2018 年 3 月 1 日,它返回 15198624000000000。
但是js中的代码:

var from = $input.split(".");
var d = new Date(from[2], from[1] - 1, from[0]);
var dStart = new Date(1970, 1, 1);
var seconds = d.getTime();
var secondsStart = dStart.getTime();
var dateDifference = seconds - secondsStart;

对于“01.03.2018”,它返回 1517184000000

var ticks2 = ((d.getTime() * 10000) + 621355968000000000);
var ticks1 = ((dStart.getTime() * 10000) + 621355968000000000);

var difrent = ticks2 - ticks1;

我在 js 代码中做错了什么?
我想在js中得到相同的值

【问题讨论】:

  • 滴答声与秒数不同。
  • 我可以将转换添加到刻度,但没有任何变化
  • 您是否正在尝试从一个转换为另一个,c# 和 js?或者只是尝试在两者中实现相同的功能?
  • 我想在js中获取相同的值
  • 请注意,JavaScript 日期和 .NET 日期时间都只能精确到大约 10-15 毫秒。所以获取 Ticks 的值(低至 100ns)有点傻。

标签: javascript c# date


【解决方案1】:
  • JavaScript: Date.getTime():一个数字,表示自 1970 年 1 月 1 日午夜以来的毫秒数。

  • C#: 一个刻度表示一百纳秒或百万分之一秒。一毫秒有 10,000 个滴答声,或一秒有 1000 万个滴答声。

所以,<i>JavaScript ticks</i> = (<i>C# ticks</i> / 10000) 你的代码看起来没问题。您只需要考虑您选择的任何代码(C# 或 JavaScript)的差异。

如果您在 JavaScript 中采用(明确的日月日期)(例如 2018 年 12 月 23 日)

var $input = "23.12.2018";
var from = $input.split(".");

var dNew = new Date(from[2], from[1]-1, from[0]);
//Note dStart has 0 as month because JavaScript dates start at 0 and end with 11
var dStart = new Date(1970, 0, 1);
var seconds = dNew.getTime();
var secondsStart = dStart.getTime();
var dateDifference = seconds - secondsStart;
// multiply by 10000 to reconcile to c#
console.log("===> " + dateDifference * 10000);

如果您在 C# 代码中使用 StringDateToDecimal("23 december 2018");,则两个答案都为 15455232000000000。

我希望我能明白你的意思。

【讨论】:

  • 这是答案的一部分。如果我将结果乘以 10,000,那么我会得到相同顺序的数字。但值仍然会有所不同 15198624000000000 和 15171840000000000
  • 同意 - 我已更新答案,更改脚本中 new Date() 的实例化并在控制台中生成结果。
  • @rajesh 您评论的背景是什么?你觉得H的计算有误吗?我的意思是,很难同时将它们都解雇并从两者获得相同的价值。这更多的是如何取一个并在另一个中创建日期时间。几乎可以肯定,来自不同代码库的任何两次执行之间都会存在差异。
【解决方案2】:

JavaScript Date 类型的起源是从 1970 年 1 月 1 日午夜开始的 Unix 纪元。

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

对于滴答声,来自 DateTime.Ticks 文档:

单个滴答表示一百纳秒或百万分之一秒。一毫秒有 10,000 个滴答声,或一秒有 1000 万个滴答声。

因此,考虑到所有这些,您的代码可以简化为:

var d = new Date(2018, 3, 1); // Your date
var dStart = new Date(1970, 1, 1);
var dateDifference = ((d.getTime() - dStart.getTime()) * 10000);
console.log(dateDifference); // 15198588000000000

【讨论】:

    猜你喜欢
    • 2020-01-03
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 2010-12-04
    • 2011-06-12
    相关资源
    最近更新 更多