有学有练才叫学习:学而不思则罔,思而不学则殆:学而不习,纸上谈兵,习而不进,画地为牢!

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

uni-app cat 3个月前 (07-17) 94次浏览 已收录 0个评论 扫描二维码

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

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

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

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

首先引入库:

const moment = require('moment');

使用库获取当前时间:

<code class="has-numbering">const time = moment().format('YYYY-MM-DD HH:mm:ss');</code>

上面的方法就可以获取当前的时间,本地没问题,但是云端就会慢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');

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

喜欢 (0)
cat
关于作者:
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址