我在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问题,因为它只会破坏他的机器,而没有其他开发人员?
答案 0 :(得分:1)
根据the XDate documentation,传递true
会将值视为UTC - 而不是本地值。
默认是本地的,或false
用于此设置。
其他一些事情:
您不需要缩短毫秒数。 XDate可以很好地处理它们。
首先在字符串中引用引号有点奇怪。通常用引号来分隔字符串的开始和停止位置。如果引号在你的字符串中,那么在错误地插入堆栈的某个地方。
您提到了客户端堆栈和数据库,但您没有提及从数据库向客户端提供数据的内容。例如,ASP.Net或PHP。如果您想避免在客户端上造成混淆,那么您应该在此图层中调整时间戳以使其完全合格。
通过限定,我的意思是它应该包含Z
来表示UTC,或者包含时区偏移量,例如-05:00
。这是RFC 3339建议的。通过无限制地将值发送给客户端,您允许不同的客户端根据适用于它们的任何本地时区来解释该值。这不是通常所需要的。