Nodejs在处理时间上的坑——时区问题

在MSSQL数据库中使用GETDATE()函数获取时间,是正常操作,但这个时间获取的是当地时间。但是还有一个函数GETUTCDATE(),这个函数是获取的世界标准时间,两个函数之间存在这时区的差异。

那么问题来了,在Nodejs中直接从数据库中读取回来的时间,在浏览器中直接显示是正常的,但会显示成2024-05-14T10:55:20.883Z这样的格式,当你需要格式化一下显示成2024-05-14 10:55:20的时候,就会涉及到一个时区的问题,可能这个时间会显示成2024-05-14 18:55:20,多了8个小时,因为系统时区是'Asia/Shanghai',下面两个格式化程序都会有这样的问题

const formatDateTime= (time) => {
        const date = new Date(time)
        const YY = date.getFullYear() + '-'
        const MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'
        const DD = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
        const hh = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':'
        const mm = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':'
        const ss = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
        return YY + MM + DD + ' ' + hh + mm + ss
    },
    const formatByMomentTimezone=(time) => {
        console.log('Time:', time)
        // set true:not get Cache
        let timezoneName = moment.tz.guess(true)
        // 首先调用 Intl.DateTimeFormat().resolvedOptions().timeZone
        console.log('timezoneName', timezoneName)
        const resDate = moment.tz(time, timezoneName)?.format()
        return resDate || ''  //
    },

 最终解决方案,将MSSQL数据库中GETDATE()换成GETUTCDATE(),这样一来所有的时间都是国际标准时间,NodeJS在做时间转换的时候都正常了。

这个坑爬了整整一天时间。哎。。。。。以前没注意这个小细节。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值