我在我们的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的问题,因为它只是在他的机器上坏了,而没有其他开发人员?

最佳答案

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

默认值为本地,或此设置为false

See the JSFiddle here.

其他一些事情:


您不需要修剪毫秒。 XDate可以很好地处理它们。
字符串中带有引号的开头有点奇怪。通常用引号来分隔字符串的开始和结束位置。如果引号在您的字符串中,那么它们将被错误地插入堆栈中更高的位置。
您提到了客户端堆栈和数据库,但是没有提到从数据库向客户端提供数据的内容。例如,ASP.Net或PHP。如果要避免在客户端上造成混乱,则应在此层中调整时间戳以使其完全合格。

合格的意思是,它应该包含Z表示UTC,或者包含时区偏移量(例如-05:00)。这是RFC 3339推荐的。通过将值无条件发送给客户端,您允许不同的客户端根据适用于他们的任何本地时区来解释值。这通常不是所期望的。

关于javascript - Mac上的JavaScript XDate无法识别本地时区,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24658782/

10-12 04:10