在Dropbox的扩展经验教训的第1部分中,有一些很好的建议:
将所有内容都保留在UTC内部
!服务器时间,数据库中的内容等。这将节省很多麻烦,而不仅仅是夏时制。某些软件甚至无法正确处理非UTC时间,因此不要这样做!我们将墙上的时钟设置为UTC。如果要向用户显示时间,请在最后一秒进行时区转换。
将unix时间毫秒发送到服务器,您就知道用户选择了哪个时间点。然后使用UTC处理服务器上的所有内容,并将毫秒整数返回给客户端。
客户端/ Javascript:
var date = new Date();var clientMilliseconds = date.getTime();// send clientMilliseconds to server
服务器/ Java:
Date date = new Date(clientMilliseconds);// store the date, then get it backlong serverMilliseconds = date.getTime();// send serverMilliseconds back to client
客户端/ Javascript:
var date = new Date(serverMilliseconds);// If receiving the error "Invalid Date", serverMilliseconds// needs to be converted to an Integer. Consider:// parseInt: parseInt(serverMilliseconds, 10)// unary +: (+serverMilliseconds)
在此过程中,
date服务器和客户端上的对象都将反映各自的时区,因此,如果您同时查看这两个时区,它们看起来可能会有所不同,但是如果您使用相同的时区将它们转换回UTC,则它们并非相同。
因此,回答您的问题:
如果我用这些毫秒创建一个Javascript Date对象,它将得到原始日期吗?
是。
Java的
Date(longdate)构造函数和
getTime()方法以Unix时间毫秒为单位进行操作。Javascript
getTime()和
DateConstructor也是如此。除了协调世界时(GMT
/ UTC),不应涉及其他任何时区。



