1. ホーム
  2. javascript

[解決済み] javaScriptで日付の目盛りを取得する方法は?

2022-02-12 22:51:15

質問内容

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年03月01日の場合、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;

"2018.03.01"の場合、1517184000000が返されます。

または

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

var difrent = ticks2 - ticks1;

jsのコードで何が間違っているのでしょうか?
jsで同じ値を取得したい。

どのように解決するのですか?

  • JavaScriptです。 Date.getTime() 1970年1月1日午前0時からのミリ秒を表す数値です。

  • C#: 1ティックは100ナノ秒、1,000万分の1秒を表します。1ミリ秒は1万刻み、1秒は1千万刻みです。

だから JavaScript ticks = (C# ticks / 10000) で、あなたのコードはOKのように見えます。どちらのコード(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);

を使用すると、どちらの答えも15455232000000000になります。 StringDateToDecimal("23 december 2018"); をC#のコードに追加してください。

ご質問の主旨が伝われば幸いです。