2012-07-06 83 views
4

我正在编写一个基于云的程序,它利用UTC保存到服务器的日期,并在往返时将其转换回来。问题是,云中的实例根据浏览器上的本地化设置自动转换JsonResult日期时间值以获得结果。防止自动格式化JsonResult日期

我已经经历了大量的步骤,以确保两个级别上的服务器端代码返回正确的数据,并且它在所有实例上,并且我的页面上没有任何Javascript代码正在进行更改(甚至全部删除我的Javascript日期格式以防万一),我用Firebug来确定它改变的确切点,就是当我的页面从我的JsonResult方法接收到Json Result时。就像我说的,我已经调整了值之前被发送到页面,他们是正确的,并根据我的回应,他们修改基于浏览器的位置....

有没有人有类似的问题?

返回值:日期(13417.92亿)07/08/2012 17:00

应该是:日期(1341817200000)(07月09日12:00 AM)

感谢

+0

你说的是自动转换为本地时间还是格式化?在服务器上获取发送日期或发送回客户端时会发生不需要的行为?我也会选择删除azure标签。 – 2012-07-07 08:19:30

+0

这是一个基于Azure云的问题,这就是为什么我用Azure标记它的原因。返回JsonResult时发生问题...发送给客户端之前服务器上的所有值都是准确的...但是当JsonResult返回我的对象​​时,它们包含基于浏览器与服务器本地差异的修改日期时间。 – 2012-07-09 16:00:37

+0

我需要为特定的时区格式化日期,无论加载页面的浏览器位于何处,这都是我需要解决的基本问题。 – 2012-07-09 16:01:32

回答

1

我终于得到了正确的结果,对我的应用程序进行了许多修改。我做了很多事情来实现这个目标......首先,我实现了timezone.JS以获取将在应用程序中使用的时区列表,并使用jstz获取当前浏览器加载页面的时区。接下来,我必须为mvc创建一个文件get方法,以访问时区以加载到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'); 

这允许在云项目将跑任何服务器,并在任何浏览器中显示,而不考虑时区,并允许用户本地查看和配置时区敏感数据,并允许用户查看可配置数据库值的开始/结束日期。

0

你有没有尝试,

date.toLocaleString() 

Alternat , 您可以创建一个新的Date对象并使用Date.setUTC

+0

是的,返回DT的本地版本,而不是时区以外的pst格式... – 2012-07-10 22:10:14

+0

你想要它是MM/DD/YYYY XX:YY AM/PM格式?目前的格式是什么? – CodeMad 2012-07-10 22:15:41