2

JavaScript( ) で日付を生成するクライアント側 JavaScript がありますnew Date(2007,5,1)

コードビハインドがアクセスできる隠しフィールドにこの日付を渡す必要があります。

私の問題は、隠しフィールドが DotNet 日時に変換されると、時間が正しくないことです。これは、JavaScript にクライアント ブラウザからのタイムゾーン情報が含まれているためです。

次に、DotNet はこの情報を使用して、サーバー時間とクライアント時間の差に基づいて時間を再計算します。

JavaScript から必要なのは、年、月、日だけです。

これはアプリ全体の大きな変更になるため、3 つの int 値をコード ビハインドに渡したくありません。

これを達成するための最良の方法は何ですか?

タイムゾーン情報なしでUTC時間を設定できれば、うまくいくと思います。

どんな助けでも大歓迎です。

4

4 に答える 4

1

DateTimeOffset.ParseExact を使用して、指定した形式を使用して文字列を DateTimeOffset 値に解析できます。

        string dateString = "Fri Jun 01 2007 00:00:00 GMT+08:00";
        DateTimeOffset date = DateTimeOffset.ParseExact(dateString, "ddd MMM dd yyyy hh:mm:ss 'GMT'zzz", CultureInfo.InvariantCulture);

GMT を引用符で囲む必要があります。そうしないと、M がフォーマット文字として解釈されます。

残念ながら、文字列値の一部を無視することはできません。文字列にタイムゾーンの名前が含まれている場合は、最初にそれを分割し、説明のない部分を取得する必要があります

        string dateString = "Fri Jun 01 2007 00:00:00 GMT+08:00 (Taipei Standard Time)";
        var parts=dateString.Split('(');
        string datePart = parts[0].TrimEnd();
        var date=DateTimeOffset.ParseExact(datePart,"ddd MMM dd yyyy hh:mm:ss 'GMT'zzz",CultureInfo.InvariantCulture);
于 2010-07-06T10:03:50.903 に答える
1

デモ

私の理解が正しければ、

あなたが必要.toDateString()

var date = new Date(2007,5,1);

document.write(date);
document.write("<br><br>versus<br><br>");
document.write(date.toDateString());

版画

Fri Jun 01 2007 00:00:00 GMT+0800 (Taipei Standard Time)

versus

Fri Jun 01 2007
于 2010-07-06T08:45:18.920 に答える
0

コード ビハインド ファイルで値を取得する場合は、C# でフォーマット仕様を使用することをお勧めします。私が何を意味するかを説明しましょう - JavaScript の Date(...) の日時形式は次のとおりです

" 2010 年 6 月 1 日 (火) 11:12:15 UTC+0530 "

これは、C# では次の書式文字列に変換されます - " ddd MMM d hh:mm:ss UTCzzz yyyy"

このフォーマット文字列を使用しDateTime.ParseExact(string <Hidden Field Value>, format, provider)て、C# で日時の正しい値を取得します。

プロバイダーを として使用しますSystem.Globalization.CultureInfo.InvariantCulture

于 2010-07-06T09:07:49.240 に答える
0

作成した JavaScriptDateオブジェクトから文字列を構築できます。これにはgetDate()、隠しフィールドに必要な正確な文字列を構築するために使用できるメソッドがありますgetMonth()getFullYear()

于 2010-07-06T08:30:12.030 に答える