当前位置 博文首页 > 李江辰:UniCloud云函数时区问题UTC+0改为UTC+8标准北京时间(ne

    李江辰:UniCloud云函数时区问题UTC+0改为UTC+8标准北京时间(ne

    作者:[db:作者] 时间:2021-08-23 22:19

    uniCloud云端的云函数使用的时区是utc+0,而不是 UTC+8,在云函数中使用时间时需特别注意。云函数在HBuilderX本地运行时,时区则是电脑的时间。在使用“时间戳”时两者没有差异可以规避时区问题,但如果要获取年、月、日、小时要注意时区的差异。

    云函数获取时间:new Date( )

    首先了解获取年月日时分秒基本方法:

    var time= new Date();//获取当前时间给time变量
    let year = time.getFullYear() //年
    let month = time.getMonth() + 1 //月-整数值0(1月)到11(12月)故需要加1。
    let day = time.getDate() //日
    let hour = time.getHours() //时
    let minute = time.getMinutes() //分
    let second = time.getSeconds() //秒
    

    由于服务器时间相差8小时,网上的解决方法就是在小时上直接+8得到当前的小时。

    let hour = time.getHours()+8 
    

    这种方式简单便捷,但是你会发现当服务器时间16点以后+8会导致小时超过24小时没有进入下一天的问题网上的方法是在小时上+8获得本地的小时数这个方法治标不本。
    于是在此逻辑基础上我们可以加上IF判断当+8超过24的时候Day加一以此类推即可获得正常的本地时间。

    	var Mday=new Date(time.getFullYear(),time.getMonth()+1,0).getDate();//获取当月有多少天
    	var y = time.getFullYear();
    	var m = time.getMonth() + 1;
    	var d = time.getDate();
    	var h = time.getHours()+8;
    	if(h>23){h=h-24;d=d+1;if(d>Mday){d=1;m=m+1;if(m==13){m=1;y+1}}}
    

    最终解决方案

    为了方便造个轮子~写了个函数方便直接使用
    复制即可直接调用,想要返回什么格式直接改return就行了。

    	//定义一个GetTime函数
    	GetTime:function(){
    		var time= new Date();//获取服务器当前时间给time变量 例:Fri Aug 20 2021 12:37:42 GMT+0
    		var Mday=new Date(time.getFullYear(),time.getMonth()+1,0).getDate();
    		let y = time.getFullYear() //年
    		let m = time.getMonth() + 1 //月-整数值0(1月)到11(12月)故需要加1。
    		let d = time.getDate() //日
    		let h = time.getHours() //时
    		let mm = time.getMinutes() //分
    		let s = time.getSeconds() //秒
    		if(h>23){h=h-24;d=d+1;if(d>Mday){d=1;m=m+1;if(m==13){m=1;y+1}}}
    		m = m < 10 ? ('0' + m) : m;d = d < 10 ? ('0' + d) : d;h=h < 10 ? ('0' + h) : h;mm = mm < 10 ? ('0' + mm) : mm;
    		return (y+'年'+m+'月'+d+'日'+h+':'+mm+':'+s)
    	},
    	var a=GetTime()
    	console.log(a)//2021年8月20日20:37:42
    
    cs
    下一篇:没有了