0

jsonの日付解析に奇妙な問題があります。私はjsonの日付を解析するために以下を使用しています:

dateFormat(new Date(parseInt(user.RegDate.substr(6))), "mm/dd/yyyy")

ローカルマシン(クライアント)がサーバーのタイムゾーンとは異なるタイムゾーンにある場合、ユーザーの登録日を取得しようとすると、異なる日付が返されます。

例:

SQLでの登録日:2010-07-22 19:00:00.000

ISTタイムゾーンにあるローカルマシンでデバッグすると、返されるJsonResultからの日付は次のとおりです。

/Date(1279805400000)/
Thu Jul 22 19:00:00 UTC+0530 2010

ESTタイムゾーンにあるデプロイ済みサーバーからアクセスしたときの同じデータで、返されるJsonResultの日付は次のとおりです。

/Date(1279843200000)/
Fri Jul 23 05:30:00 UTC+0530 2010

ローカルマシンをESTタイムゾーンに変更すると、これは完全に機能します(同じ日付を返します-7月22日木曜日)。私はここで何かが欠けていますか?提案してください

サーバーコードは[編集]です:

public JsonResult GetregisteredUsersJSON()
{
   var usersList = this.GetregisteredUsers()
   return Json(usersList, JsonRequestBehavior.AllowGet);
}

private List<Users> GetregisteredUsers()
{
    return (from u in _context.mu_Users
        orderby u.Reg_Date descending
        select new Users
        {
            FirstName = u.First_Name,
            LastName = u.Last_Name,
            RegDate = u.Reg_Date
        }).ToList();
}
4

3 に答える 3

1

これはサーバー側の問題であり、フォーマットされたクライアント側の値を誤って解釈していると強く思います。

ローカル値を送信しているように見えますが、UTC 値を送信する必要があります。あなたのデータベースの値はUTC値であることを意図していると思います-そうでなければ、全体が最初からやや恣意的になります. サーバーがタイムゾーンを変更するときに別の値を送信しているという事実は、大きな警告灯になるはずです。ミリ秒の値だけを取る Date コンストラクターを呼び出す場合、それは 1970 年 1 月 1 日 UTC からのミリ秒であることを意味します。

値が 1900 UTC であると仮定すると、IST クライアントで「Fri Jul 23 00:30:00 UTC+0530 2010」、EST クライアントでは「Thu Jul 22 12:00:00 UTC-0700 2010」と表示されます。 client - どちらも同じ UTC 時間を表しているためです。

サーバーコードはどのように見えますか?

于 2010-07-26T06:04:47.873 に答える
0

今日も同じことが私に起こっていました。私はSQLサーバーの日付フィールドを使用しており、DBから取得した日付をMVC経由でjsonに変換しています。違いの原因を実際に説明することはできませんが、ローカル環境と同期していない sql server 08 R2 の更新に関連していると思われます。

とにかく、C#コードだけで日付を設定するだけで修正できました。使いやすいように拡張メソッドを作成しました。

    public static DateTime DateOnly(this DateTime date)
    {
        return new DateTime(date.Year, date.Month, date.Day);
    }
于 2012-04-20T17:11:44.847 に答える