unicloud云函数时间慢8小时的解决方案

最近在做uniapp+unicloud小程序项目的时候,本地运行的时候一切正常,部署到云端运行的时候,发现保存在数据库中的时间慢了8个小时。

经过查资料才知道,unicloud云函数中使用的时区是utc+0,而标准的北京时间时区应该是utc+8,所以在云函数中使用时间就要特别注意这点。在hbuilderX中本地运行时,使用的是电脑上的时间,所以就会出现上面说的本地运行一切正常,部署到云端慢8个小时。

最简单的解决方案就是直接在获取的时间上加8个小时,当然这种方式本质上是没有多大问题,但是本地测试的时候就会快8个小时,所以治本不治标。那么怎么避免这个问题呢?

获取当前时间

为了快捷开发项目,我在云函数中使用了moment.js时间处理类库,也可以自己去写一个获取时间的函数,这里为了方便演示,我就直接使用库来介绍:

首先引入库:

const moment = require('moment');

使用库获取当前时间:

const time = moment().format('YYYY-MM-DD HH:mm:ss');

上面的方法就可以获取当前的时间,本地没问题,但是云端就会慢8个小时,如果使用new Date()的方式获取,效果是一样的。

兼容本地和云端标准时间

使用new Date().getTimezoneOffset()来判断,如果结果为0就加8小时,如果不为0就正常获取时间,js中的getTimezoneOffset()的意思是方法返回 UTC 时间和本地时间之间的时差,以分钟为单位。

兼容使用(最终方案):

const time = new Date().getTimezoneOffset()==0? moment().add(8, 'hours').format('YYYY-MM-DD HH:mm:ss') : moment().format('YYYY-MM-DD HH:mm:ss');

总结:与其绞尽脑汁的空想为什么会这样,还不如多查阅资料多学习,任何问题总会有解决方案的~加油!!!

猜你喜欢

转载自blog.csdn.net/qq_42961150/article/details/125635819