4

サーバーへの日付保存にUTCを利用し、往復で変換するクラウドベースのプログラムを作成しています。問題は、クラウド内の私のインスタンスが、結果を取得するブラウザーのローカリゼーション設定に従ってJsonResult日時値を自動変換していることです。

両方のレベルのサーバー側コードが適切なデータを返していることを確認するために多くの手順を実行しました。すべてのインスタンスにあり、ページ上のJavascriptコードも変更を加えていません(Javascriptの日付形式をすべて削除しました)。念のため)、Firebugを使用してトレースし、変更される正確なポイントを特定しました。これは、ページがJsonResultメソッドからJsonResultを受け取ったときです。私が言ったように、私はページに送信される前に値をデバッグしました、そしてそれらは適切であり、そして私の応答では、それらはブラウザの場所に基づいて変更されます...。

誰かが同様の問題を抱えていましたか?

返された値:日付(1341792000000)2012年7月8日17:00

日付(1341817200000)(07/09/2012 12:00 AM)

ありがとう

4

4 に答える 4

1

私は最終的に、アプリケーションに多くの変更を加えて、適切な結果を得ることになりました。これを実現するために多くのことを行いました...最初に、timezone.JSを実装して、アプリケーション内で使用されるタイムゾーンのリストを取得し、jstzを使用してページをロードするブラウザーの現在のタイムゾーンを取得しました。次に、(mvcの場合)タイムゾーンにアクセスしてtimezoneJSにロードするファイルgetメソッドを作成する必要があります。

次に、タイムゾーンを保存するときに、タイプとしてpstを指定し、ラウンドトリップでutcに変換して、インターフェイスを更新しました。

Json日付のフォーマット時に、timezoneJSメソッドを実行し、jstzからタイムゾーン名を取得して、次のように新しい日付値を設定します。

var timezone = jstz.determine();
timezoneJS.timezone.zoneFileBasePath = '/Item/GetTz'; // get file method
var dt = new timezoneJS.Date(parseInt(jsonDate.substr(6), timezone.name())); // strips out date from json date
dt.setTimezone('America/Los_Angeles');

これにより、クラウドプロジェクトを任意のサーバーで実行し、タイムゾーンに関係なく任意のブラウザーで表示できます。また、ユーザーはタイムゾーンの機密データをネイティブに表示および構成でき、構成可能なデータベース値の開始日と終了日を確認できます。 。

于 2012-07-10T22:39:56.270 に答える
0

たぶんhttp://msdn.microsoft.com/en-us/library/system.datetime.specifykind.aspxを使用しています

于 2012-07-08T08:01:47.913 に答える
0

試してみましたか

date.toLocaleString()

または、新しいDateオブジェクトを作成して使用することもできますDate.setUTC

于 2012-07-10T17:10:34.337 に答える
0

OPが言ったように:

問題は、クラウド内の私のインスタンスが、結果を取得するブラウザーのローカリゼーション設定に従ってJsonResult日時値を自動変換していることです。

最近、似たようなことを経験しました。$.ajax応答から来る奇妙な行動。ブラウザの言語設定に応じて、文字列形式で受信した日付は、言語設定で設定されているものに変換されます。

たとえば、Postmanでは、WebAPIの応答は次のようになります。

{
  "id": "10057",
  "d_date": "3/30/2017 3:00:00 AM",
  "sum": 253.0
},

ブラウザがenglish(en / en-us)に設定されている場合、応答は上記と同じです。

ブラウザがenglish-uk(en-gb)に設定されている場合、応答は次のようになります。

{
  "id": "10057",
  "d_date": "30/03/2017 03:00:00",
  "sum": 253
}

ブラウザがgerman(de)に設定されている場合、応答は次のようになります。

{
  "id": "10057",
  "d_date": "30.03.2017 03:00:00",
  "sum": 253
}

したがって、どういうわけか、ブラウザまたは$.ajaxライブラリはスマートになり、日付を自動的にフォーマットしようとしています。

おそらく、最善の解決策は、WebAPIが日付をISO日時形式で送信することです。バックエンドを変更できない場合の別の解決策は、AJAXヘッダーリクエストにaccept-language:enを追加することです。そのようなもの:

$.ajax({
  type: 'POST',
  url: '/endpoint/',
  contentType: 'application/json',
  data: JSON.stringify(body),
  dataType: 'json',
  async: false,
  headers: {
    'accept-language': 'en'
  }
})
于 2022-02-24T16:15:00.670 に答える