最近开发过程中,后端传过来一个“2018-03-15T17:53:19.6307928”字符串,需要将字符串转换成“2018-03-15 17:53”的格式展示出来。首先我使用了var time=new Date("2018-03-15T17:53:19.6307928")方法将时间转换成标准时间格式,再通过time.getFullYear()等方法获取到年月日时分的信息,最后通过字符串拼接成为想要的格式。
OK,这个方法最开始一直没有问题,在PC浏览器上打开,一切正常,但是后来在移动端打开时,发现转换后的字符串,时间比正确时间快了8小时,后来多次测试发现,应该是不同终端不同浏览器对于该时间格式的解析有区别,在windowsPC浏览器中,我们修改了电脑的时区设置,new Date(str)返回的时间信息如下
new Date('2018-03-15T17:53:19.6307928') Thu Mar 15 2018 17:53:19 GMT+0800 (中国标准时间) new Date('2018-03-15T17:53:19.6307928') Thu Mar 15 2018 17:53:19 GMT+0900 (Japan Standard Time)
PC端不会修改你的时间,只是将其转换成本地时间的格式,然而在移动端,其返回的则是
new Date('2018-03-15T17:53:19.6307928') Thu Mar 16 2018 01:53:19 GMT+0800 (CST)
也就是移动端默认传入的时间是0时区的时间,在将其转换为本地时间格式时加了八小时上去,这样的话就出现了移动端和PC端显示时间不同的问题,因此在这里不建议后端传“2018-03-15T17:53:19.6307928”这种时间格式的字符串,而是在后端直接做时间转换,传过来“2018-03-15 17:53”格式的字符串直接进行展示。