4

I'm writing a cloud based program that utilizes UTC for date saving to the server, and convert it back on the round trip. Problem is, my instance in the cloud is autoconverting the JsonResult datetime values according to the localization settings on the browser obtaining the result.

I have gone through tons of steps to make sure the server side code on both levels is returning the proper data, and it is on all instances, and no Javascript code on my page is making the change either (even removed all my Javascript date formatting just in case), I have traced out with Firebug to determine the exact point that it changes, is when my page receives the Json Result from my JsonResult method. Like I said, I have debugged the values before being sent to the page, and they are proper, and on my response, they are modified based upon browser location....

Has anyone had a similar problem?

Value returned:Date(1341792000000) 07/08/2012 17:00

Should be: Date(1341817200000) (07/09/2012 12:00AM)

Thanks

4

4 回答 4

1

我最终得到了正确的结果,对我的应用程序进行了许多修改。我做了很多事情来实现这一点......首先,我实现了 timezone.JS 来获取将在应用程序中使用的时区列表,并使用 jstz 来获取浏览器加载页面的当前时区。接下来,我必须(对于 mvc)创建一个文件获取方法,该方法访问时区以加载到 timezoneJS 中。

接下来,在保存时区时,我将 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 中,Web API 响应是这样的:

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

如果浏览器设置为英语(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图书馆正试图变得聪明并自动格式化日期。

可能最好的解决方案是 Web API 以 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 回答