Json возвращает разные даты, когда локальный компьютер и сервер находятся в разных часовых поясах - PullRequest
0 голосов
/ 26 июля 2010

У меня странная проблема при разборе даты 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

Это работает отлично (возвращает ту же дату - чт22 июля), когда я меняю местную машину на EST Timezone.Я что-то здесь упускаю?Пожалуйста, предложите

Код сервера [EDIT]:

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();
}

Ответы [ 2 ]

1 голос
/ 26 июля 2010

Я сильно подозреваю, что это проблема на стороне вашего сервера, а также неверная интерпретация отформатированного значения на стороне клиента.

Вы должны отправлять значение UTC, тогда как похоже, что вы отправляете вниз локальное значение.Я предполагаю, что значение в вашей базе данных должно быть значением UTC - в противном случае все становится несколько произвольным для начала.Тот факт, что вы отправляете другое значение, когда ваш сервер меняет часовой пояс, должен быть большим сигнальным индикатором.Когда вы вызываете конструктор Date, принимающий только значение в миллисекундах, это означает, что с 1 января 1970 года UTC это будет миллисекундами.

Предполагая, что ваше значение равно 1900 UTC, вы должны увидеть23 июля 00:30:00 UTC + 0530 2010 "на вашем клиенте IST и" Чт 22 июля 12:00:00 UTC-0700 2010 "на вашем клиенте EST - потому что оба они представляют одно и то же время UTC.

Как выглядит код вашего сервера?

0 голосов
/ 20 апреля 2012

То же самое происходило со мной сегодня.Я использую поле даты сервера sql и просто конвертирую даты, полученные из БД, в json через MVC.Я не могу действительно объяснить, что вызывает разницу, но я подозреваю, что это связано с обновлениями sql server 08 R2, которые не синхронизированы с моей локальной средой.

В любом случае, я смог исправить это, просто установив дату только в коде c #.Для простоты использования я создал метод расширения:

    public static DateTime DateOnly(this DateTime date)
    {
        return new DateTime(date.Year, date.Month, date.Day);
    }
...