web-dev-qa-db-ja.com

C#DateTimeをJavaScriptの日付に変換する

MVCからC#DateTimeを受け取る関数がJavaScriptにあります。日付がnullの場合は「-」を返し、有効な日付の場合は書式設定された日付を返します。

重要:C#から別の形式で日付を送信することはできません。

Javascript:

function CheckDate(date) {

  if (date == "Mon Jan 01 0001 00:00:00 GMT+0000 (GMT Daylight Time)")
    return "-";
  else {
    var dat = new Date(date);
    return dat.getFullYear() + dat.getMonth() + dat.getDay();
  }

日付がC#New DateTimeであるかどうかを比較するより良い方法はありますか?

また、「yyyy/MM/dd」形式で日付を解析して返すにはどうすればよいですか?

35
DK ALT

行き詰まっている出力を考えると、javascript側でDateTimeの0をキャッチするより良い方法は考えられません。

_Date.parse_は解析のニーズに対応するはずですが、ミリ秒数を返すため、Dateコンストラクターでラップする必要があります。

_var date = new Date(Date.parse(myCSharpString));
_

返却日については、単に

_date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + (date.getDate() + 1);
_

(_date.getMonth_および_date.getDate_は1インデックスではなく0インデックスです。)

フィドル: http://jsfiddle.net/GyC3t/

[〜#〜] edit [〜#〜]JoeBのキャッチのおかげで、修正させてください。 date.getMonth()関数のインデックスは0ですが、date.getDate()関数のインデックスは1です。 date.getMonthは現地時間(UTCより前)で機能するため、フィドルは+1で「機能」していました。ドキュメントを適切に確認せず、1を追加しただけで、フィドルで機能しました。

これを行うより適切な方法は次のとおりです。

返却日については、単に

_date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + (date.getUTCDate());
_

(_date.getMonth_は0でインデックス付けされ、_date.getDate_は1でインデックス付けされますが、タイムゾーンの違いの影響を受けやすくなります。)

フィドル: http://jsfiddle.net/GyC3t/25/

45

次を使用して、JavaScriptの日付をC#に渡します。

var now = new Date();
var date = (now.getTime() / 86400000) - (now.getTimezoneOffset() / 1440) + 25569;

したがって、C#からミリ秒数を取得する場合、次のようになります。

var csharpmilliseconds;
var now = new Date();
var date = new Date((csharpmilliseconds + (now.getTimezoneOffset() / 1440) - 25569) * 86400000);
2
Nick Gotch