web-dev-qa-db-ja.com

JavaScriptの日時をC#の日時に変換する方法は?

JavaScriptの日付からC#の日付に変換する場合は、getTime()を使用し、その結果をC#DateTimeに追加する必要があることを読んでいます。

このJavaScript時間があるとします。

Date {Tue Jul 12 2011 16:00:00 GMT-0700 (Pacific Daylight Time)}

1310522400000ミリ秒にレンダリングします

var a = new DateTime(1970, 01, 01).AddMilliseconds(1310522400000);

// result
7/13/2011 2:00:00 AM

だからこれは間違っています。私は何をする必要があるのか​​分かりません。

46
chobo2

まず、JavaScriptで次の関数を使用して、必要な形式で文字列を作成します

_var date = new Date();
var day = date.getDate();       // yields date
var month = date.getMonth() + 1;    // yields month (add one as '.getMonth()' is zero indexed)
var year = date.getFullYear();  // yields year
var hour = date.getHours();     // yields hours 
var minute = date.getMinutes(); // yields minutes
var second = date.getSeconds(); // yields seconds

// After this construct a string with the above results as below
var time = day + "/" + month + "/" + year + " " + hour + ':' + minute + ':' + second; 
_

この文字列をコードビハインド関数に渡し、文字列パラメーターとして受け入れます。次のように、コードビハインドでDateTime.ParseExact()を使用してこの文字列をDateTimeに変換します。

_DateTime.ParseExact(YourString, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
_

お役に立てれば...

29
Harun

toJSON() JavaScriptメソッドを使用すると、JavaScriptのDateTimeをC#がDateTimeとして認識できるものに変換できます。

JavaScriptコードは次のようになります

var date = new Date();
date.toJSON(); // this is the JavaScript date as a c# DateTime
35
Garth

あなたはほとんど正しかった、ただ一つの小さな修正が必要です:

var a = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
    .AddMilliseconds(1310522400000)
    .ToLocalTime();
26
vasiliy

DateTime.Parseの方がはるかに良い方法です。 JS日付とC#日付は、同じルートから始まりません。

サンプル:

DateTime dt = DateTime.ParseExact("Tue Jul 12 2011 16:00:00 GMT-0700",
                                  "ddd MMM d yyyy HH:mm:ss tt zzz",
                                  CultureInfo.InvariantCulture);
6
Mrchief

アプリケーションでmoment.jsを使用している場合。

var x = moment(new Date())。format( 'DD/MM/YYYY hh:mm:ss')

xを分離コード関数に渡し、文字列パラメーターとして受け入れます。次のようにc#でDateTime.ParseExact()を使用して、この文字列をDateTimeに変換します。

DateTime.ParseExact(YourString, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
4
raga

JSからC#に日付を送信する場合、実際には非常に簡単です-UTC日付の送信が許容される場合。

_var date = new Date("Tue Jul 12 2011 16:00:00 GMT-0700");
var dateStrToSendToServer = date.toISOString();
_

... C#側に送信...

_var success = DateTimeOffset.TryParse(jsISOStr, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out var result);
_

C#DateTimeはすでにISO日付形式を理解しており、それをうまく解析します。

C#からJSにフォーマットするには、DateTime.UtcNow.ToString("o")を使用します。

個人的には、異なる環境間で数学と論理に頼って、ミリ秒/ティックを取得して、ユーザーがクライアントで表示するのと同じ日時を(特に重要な場所で)正確に表示することは決して快適ではありません。通貨を転送するときも同じようにします(代わりに文字列を使用して安全にするか、2つの異なる整数間でドルとセントを分離します)。日付/時刻を個別の値として送信するだけで十分です( 受け入れられた回答 を参照)。

4
James Wilkins

私は別のタイムゾーンにいるので、JavaScriptとC#は同じ日付の間に2時間の差があることになります(日付を[文字列/他のオブジェクトに変換されない]日付としてWebサービスに送信しようとしても)。

JavaScriptでgetTime()を使用してミリ秒をC#日付(1970-01-01から開始)に追加しようとしましたが、C#日付では常に2時間前になってしまいました。

両側で同じ日付と時間を取得することを認めるために、私はこれをやった:

JavaScriptでは、UTC関数を使用しました。

var jsDate = Date.UTC(year,month,day,hours,minutes,seconds,millisec);

そして、C#で正しいDateTimeを取得するためにこれを行いました。

var date = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddMilliseconds(jsDate);

それが誰かを助けることを願っています。

4
Rafael Merlin

米国太平洋時間帯にいる場合、エポックは午後4時です。 1969年12月31日。エポック以降のミリ秒を

new DateTime(1970, 01, 01)

タイムゾーンがないため、your timezoneにあると解釈されました。

瞬間をエポック以降のミリ秒と考えるのは本当に悪いことではありませんが、エポックは1970-01-01T00:00:00Zにすぎないことを理解してください。

タイムゾーンのない日付として表される場合、時間のインスタントを考えることはできません。

1
Ray Toal

Moment.jsライブラリを使用してJs時間をC#に送信することもできます。

JavaScript:var dateString = moment(new Date()).format('LLLL')

C#:DateTime.Parse(dateString);

0
AminSojoudi

JS:

 function createDateObj(date) {
            var day = date.getDate();           // yields 
            var month = date.getMonth();    // yields month
            var year = date.getFullYear();      // yields year
            var hour = date.getHours();         // yields hours 
            var minute = date.getMinutes();     // yields minutes
            var second = date.getSeconds();     // yields seconds
            var millisec = date.getMilliseconds();
            var jsDate = Date.UTC(year, month, day, hour, minute, second, millisec);
            return jsDate;
        }

JS:

var oRequirementEval = new Object();
var date = new Date($("#dueDate").val());

CS:

requirementEvaluations.DeadLine = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
    .AddMilliseconds(Convert.ToDouble( arrayUpdateRequirementEvaluationData["DeadLine"]))
    .ToLocalTime();
0
Jaydeep Shil

JavaScript(HTML5)

function TimeHelper_GetDateAndFormat() {
    var date = new Date();

    return MakeValid(date.getDate()).concat(
        HtmlConstants_FRONT_SLASH,
        MakeValid(date.getMonth() + 1),
        HtmlConstants_FRONT_SLASH,
        MakeValid(date.getFullYear()),
        HtmlConstants_SPACE,
        MakeValid(date.getHours()),
        HtmlConstants_COLON,
        MakeValid(date.getMinutes()),
        HtmlConstants_COLON,
        MakeValid(date.getSeconds()));
}

function MakeValid(timeRegion) {
    return timeRegion !== undefined && timeRegion < 10 ? ("0" + timeRegion).toString() : timeRegion.toString();
}

C#

private const string DATE_FORMAT = "dd/MM/yyyy HH:mm:ss";

public DateTime? JavaScriptDateParse(string dateString)
{
    DateTime date;
    return DateTime.TryParseExact(dateString, DATE_FORMAT, CultureInfo.InvariantCulture, DateTimeStyles.None, out date) ? date : null;
}
0
MyKuLLSKI

Harunの答えにはいくつかの間違いがありましたが、以下で修正されています。

1)harunが使用された日付getDay()は正しくありませんgetDate()

2)getMonth()は実際の月よりも1か月少ない月を与えるため、以下に示すように1ずつ増やす必要があります

_var date = new Date();
var day = date.getDate();           // yields 
var month = date.getMonth() + 1;    // yields month
var year = date.getFullYear();      // yields year
var hour = date.getHours();         // yields hours 
var minute = date.getMinutes();     // yields minutes
var second = date.getSeconds();     // yields seconds

// After this construct a string with the above results as below
var time = day + "/" + month + "/" + year + " " + hour + ':' + minute + ':' + second; 
_

この文字列をコードビハインド関数に渡し、文字列パラメーターとして受け入れます。次のように、コードビハインドでDateTime.ParseExact()を使用してこの文字列をDateTimeに変換します。

_DateTime.ParseExact(YourString, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
_

これは私のために働いた!これもあなたのお役に立てば幸いです。

0
Rohit Arora

@Garthが指摘したソリューションを使用して問題を解決することができました。

date.toJSON()
0
Juan Martí

[〜#〜] update [〜#〜]:.NETバージョン4.6から FromUnixTimeMilliseconds のメソッドを使用- DateTimeOffset 代わりに構造:

DateTimeOffset.FromUnixTimeMilliseconds(1310522400000).DateTime
0
Andriy Tolstoy

TimeZoneInfo ....を使用して日時を変換できると思います...

    static void Main(string[] args)
    {
        long time = 1310522400000;
        DateTime dt_1970 = new DateTime(1970, 1, 1);
        long tricks_1970 = dt_1970.Ticks;
        long time_tricks = tricks_1970 + time * 10000;
        DateTime dt = new DateTime(time_tricks);

        Console.WriteLine(dt.ToShortDateString()); // result : 7/13
        dt = TimeZoneInfo.ConvertTimeToUtc(dt);

        Console.WriteLine(dt.ToShortDateString());  // result : 7/12
        Console.Read();
    }
0
shenhengbin