45

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」形式で解析して返すにはどうすればよいですか?

4

2 に答える 2

57

あなたが立ち往生している出力を考えるとDateTime、javascript 側で 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/

編集 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/

于 2013-07-30T14:46:04.160 に答える
3

以下を使用して、Javascript Date を 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);
于 2013-07-30T14:55:20.620 に答える