2012-02-23 73 views
0

在我的项目中,有几个日期时间类型的字段,如航班的出发/到达日期和时间,无论用户编辑如何,都应该完全相同他们。如何在使用Javascript设置/获取价值时将日期时间字段设置为时区中性

我使用ASP.NET MVC3和dojo构建应用程序。在后端,我可以将给定的值作为UTC时间处理并保存到数据库中。但是,当它使用Json传递给前端时,Javascript似乎将其调整为当地时间,页面上的日期/时间选择器显示调整后的值。看来,当我使用新的日期(...),它会自动调整到当地时间。

下面是我在页面上使用的解析函数(因为ASP.NET MVC3的JsonRest返回日期类似“/ Date(464371200000)/”)。

function (/*string*/dateStr) { 
     if (!dateStr) { 
      return dateStr; 
     } 
     var jsonResultPattern = /Date\([+-]?(\d+)\)/; 
     if (dateStr.match(jsonResultPattern)) { 
      return new Date(parseInt(dateStr.substr(6))); 
     } 
     else { 
      return dateStr; 
     } 
    }, 

我该如何实施这种情况?有最佳做法还是示例?

回答

1

改变返回为UTC时间如下:

return new Date(parseInt(dateStr.substr(6))).toUTCString(); 

所有时间在JavaScript在内部存储为UTC。如果您希望函数返回实际的日期对象,并且您在小部件中使用某些方法(如getFullYear()),则会将其转换为本地时间。如果你想保持它在UTC,你必须使用UTC的方法,如:

dateObj.getUTCFullYear();   // Year as a 4-Digit Number 
dateObj.getUTCMonth();    // Month as a number from 0 - 11 
dateObj.getUTCDate();    // Day of the Month as a number from 1 - 31 
dateObj.getUTCDay();    // Day of the Week as a number from 0 - 6 
dateObj.getUTCHours();    // Hours as a number from 0 - 23 
dateObj.getUTCMinutes();   // Minutes as a number from 0 - 59 
dateObj.getUTCSeconds();   // Seconds as a number from 0 - 59 
dateObj.getUTCMilliseconds();  // Milliseconds as a number from 0 - 999 
dateObj.toUTCString();    // The entire Date as a string in UTC 

如果你要设置的对象,用同样的方法同上,但改变搭话设置(如 - dateObj.setUTCFullYear(1984);)。

+0

但我需要Date对象传递给小部件。 – 2012-02-23 06:41:50

+0

我改变了答案以获得更多信息。我不太清楚你准备做什么,因为你只展示了解析函数,但是有一些小部件有问题。无论哪种方式,我希望它有帮助。 – 2012-02-23 07:19:38

+0

谢谢史蒂夫。我尝试了你的方式,经过一些简单的测试后它工作正常。我需要更多时间来测试,因为这是一个很大的修改。 – 2012-02-24 05:06:41

相关问题