时间

来源:互联网 发布:mac 安装ruby 编辑:程序博客网 时间:2024/06/02 15:45

时间戳(毫秒数)不分时区,即UTC时间所累积的毫秒数,UI必须获得时间戳或者UTC时间的字符串才能正确显示浏览器本地时间。

方案1、后台数据库存放本地时间,返回时间戳给UI。

             后台数据库存放本地时间,类型为timestamp或datetime,数据中存放和显示都为本地时间。但它转为时间戳时,还是它对应的UTC时间(本地时间减去时区)所累积的毫秒数。即本地时间对应的时间戳与UTC时间对应的时间戳是相同的,因为时间戳不分时区,都是UTC时间所累积的毫秒数。UI用new Date(时间戳),生成一个时间对象,这个对象的输出都是浏览器本地时间(毫秒数转成UTC时间,再加上时区),此时用format()就可以输出浏览器的本地时间。

方案2、后台数据库存放本地时间,返回服务器本地时间的字符串给UI
方案错误。UI不知道服务器的时区,无法算出时间戳,UI只能显示服务器的本地时间了。当浏览器跟服务器在同一个时区,那么结果正确。
方案3、后台数据库存放UTC时间,返回时间戳给UI
方案错误。数据库中存放UTC时间,转成时间戳时会减去时区,因此返回给UI的是一个错误的时间戳(实际的UTC时间减去服务器时区,所累积的毫秒数)。UI不知道服务器的时区,因此无法计算时间戳。当浏览器跟服务器在同一个时区,那么,UI把后台返回的时间加上时区,能得到正确的时间。
方案4、后台数据库存放UTC时间,返回时间字符串给UI
UI将返回的时间加上时区,得到浏览器本地时间。


new Date("2013-02-08T01:30:26.000Z") ISO 8601 相当于
new Date("2013-02-08 09:30:26 GMT+00:00")
new Date("2013-02-08 09:30:26") 相当于 new Date("2013-02-08 09:30:26 GMT+08:00")


时间处理库:moment.js

0 0