2010-07-26 2 views
0

У меня странная проблема в синтаксическом анализе даты json. Я использую следующий разобрать дату JSon:Json возвращает разные даты, когда локальная машина и сервер в разных часовых поясах

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

Когда моя локальная машина (Клиент) находится в другом часовом поясе от часового пояса сервера, то он возвращает разные даты, когда я пытаюсь получить зарегистрированную дату пользователей ,

Для экс .:

Зарегистрированных дат в SQL: 2010-07-22 19:00:00.000

Когда я отладка в локальной машине, которая находится в IST Timezone, даты из 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. Мне что-то здесь не хватает? Пожалуйста, предложите

Кодекс сервера [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(); 
} 
+0

Связанного вопрос - http://stackoverflow.com/questions/2532729/daylight-saving-time-and-timezone-best-practices – Oded

ответ

1

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

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

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

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

+0

я обновил мой вопрос с кодом сервера. Я не конвертирую ничего на стороне сервера для даты, я просто получаю значение даты из БД и передаю клиенту – Prasad

0

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

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

public static DateTime DateOnly(this DateTime date) 
    { 
     return new DateTime(date.Year, date.Month, date.Day); 
    } 
Смежные вопросы