开发者社区> 问答> 正文

EMAS云函数如何修改成北京时间

已解决

问题描述

1.第一个问题

0点后我执行云函数获取日期时间

const nowdate = new Date() // 当前时间

const y = nowdate.getFullYear(),

m = nowdate.getMonth() + 1,

d = nowdate.getDate(); // 获取到的日期却是昨天的

但是new Date().getTime() // 这样获取到带小时分钟秒钟的时间戳却是准的

2.第二个问题

然后我通过new Date('2023/1/15').getTime() 等等方法想获取该日期的零点整的时间戳,但是得到的都会加了8小时的时间戳

期望结果

  1. 我想提供年月日然后得出年月日零点整的时间戳,有没有不减8小时时间戳的方法?
  2. 为啥已经0点了,我在云函数中获取到getDate()却是昨天的日期?
  3. 我查了一下好像是云函数默认时区是UTC+0,请问在哪里设置为北京时间,比如像腾讯云的云函数就能设置

但是我在EMAS云函数却找不到不知道在哪里进行设置

已尝试的方法

......在云函数中通过

  1. new Date('2023/1/15 00:00:00').getTime()
  2. new Date('2023/01/15 00:00:00').getTime()
  3. new Date('2023/1/15').getTime()
  4. Date.parse(new Date('2023/1/15'))
  5. Date.parse(new Date('2023/01/15 00:00:00'))
  6. Date.parse(new Date('2023/1/15 00:00:00'))
  7. new Date(2023,0,15,0,0,0).getTime()

获取到的时间戳都加了8小时

展开
收起
数蜂 2023-01-15 20:16:57 93 0
1 条回答
写回答
取消 提交回答
  • EMAS Serverless
    采纳回答

    开发者您好,感谢您对EMAS Serverless的关注,当前云函数暂不支持设置时区,默认为UTC+0,这也导致您遇到了这两个问题:

    d = nowdate.getDate(); // 获取到的日期却是昨天的

    在0点后执行该代码时,获取到的日期字符串仍然是“昨天”。

    new Date('2023/1/15').getTime()

    当您执行这段时,获取到的自然也是UTC+0地区的1月15日零点,此时北京是8点。

    解决方案

    根据年月日数字获取整点时刻的时间戳

    方案: 目前较好的方法就是-8小时,例如

    Date.prototype.minusHours = function(h) {
        this.setTime(this.getTime() - (h*60*60*1000));
        return this;
    }
    
    let expected = new Date("2023/1/15").minusHours(8).getTime();

    在0点后获取北京时间的年月日

    方案:获取UTC+0的日期之后再加上8小时

    Date.prototype.addHours = function(h) {
        this.setTime(this.getTime() + (h*60*60*1000));
        return this;
    }
    
    let expected = new Date().addHours(8);
    const y = expected.getFullYear(),
        m = expected.getMonth() + 1,
        d = expected.getDate();

    2023-01-16 16:45:04
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载