Mac上的JavaScript XDate无法识别本地时区

时间:2014-07-09 16:13:23

标签: javascript macos angularjs datetime cordova

我在XDate应用程序中使用了JavaScript AngularJS, Cordova PhoneGap插件。我们正在XCode开发。我们有一个函数执行REST服务调用以从SQL Server数据库中检索时间戳。

当返回值时,它采用以下格式:

  

" 2014-07-09T11:12:13.123"

为了正确填充我们的XDate变量,我必须这样做:

var date = new XDate(dateString.substring(1, 20));

删除引号,以及实际日期值的毫秒数。

但是,我发现这是将它保存为UTC时间。读完后,我发现只需添加" true" XDate构造函数的参数,因为最后一个参数将指定使用当前时区,所以我将其更新为:

var date = new XDate(dateString.substring(1, 20), true);

完美!一切都很好............在我的机器上。

一位同事刚刚将他的Mac OS更新为10.9.4(我正在运行10.8.5)。在他的机器上,当他读到他的时,它仍然认为变量是UTC时间。我刚刚让另一位开发人员对此进行测试(她在10.9.3上)并且她说的是正确的CDT时区。

这是一个Mac OS问题,因为它只会破坏他的机器,而没有其他开发人员?

1 个答案:

答案 0 :(得分:1)

根据the XDate documentation,传递true会将值视为UTC - 而不是本地值。

默认是本地的,或false用于此设置。

See the JSFiddle here.

其他一些事情:

  • 您不需要缩短毫秒数。 XDate可以很好地处理它们。

  • 首先在字符串中引用引号有点奇怪。通常用引号来分隔字符串的开始和停止位置。如果引号在你的字符串中,那么在错误地插入堆栈的某个地方。

  • 您提到了客户端堆栈和数据库,但您没有提及从数据库向客户端提供数据的内容。例如,ASP.Net或PHP。如果您想避免在客户端上造成混淆,那么您应该在此图层中调整时间戳以使其完全合格。

    通过限定,我的意思是它应该包含Z来表示UTC,或者包含时区偏移量,例如-05:00。这是RFC 3339建议的。通过无限制地将值发送给客户端,您允许不同的客户端根据适用于它们的任何本地时区来解释该值。这不是通常所需要的。