如何在node.js中设置默认时区

JavaScript056

如何在node.js中设置默认时区,第1张

经过试验,虽然设置process.env.TZ的方法不能用了,但我们完全可以自己实现一套代码出来。 

为此,我们首先在Date对象的prototype上声明一个map结构作为属性,用于存储时区名称和偏移量的关系,然后对Date类的Date方法进行修改,如果没有声明process.env.TZ变量,就默认返回原来的date对象,如果声明了该属性,就先到对应的数组中进行搜索,然后返回修改后的date对象。

process.env.TZ = "America/New_York"Date.prototype.TimeZone = new Map([

    ['Europe/London',0],

    ['Asia/Shanghai',-8],

    ['America/New_York',5]

])Date.prototype.zoneDate = function(){

    if(process.env.TZ == undefined){        return new Date()

    }else{        for (let item of this.TimeZone.entries()) {            if(item[0] == process.env.TZ){                let d = new Date()

                d.setHours(d.getHours()+item[1])                return d

            }

        }        return new Date()

    }

}var date = new Date().zoneDate()

console.log(date)

在上面的代码里,如果声明了process.env.TZ这一属性,再调用zoneDate就能得到对应时区的date啦

前言:有时候后端返回给前端的时间格式是这种的

        该时间格式为UTC格式,"+00:00","+"代表是东边的时区,当"+"变成"-"时,代表是西边的时区,后面紧接着的两个数字代表的是具体那个时区,如"+08"代表东八区,":"后的两个数代表和伦敦协调时偏差多少分钟。

        将该时间格式改成"YYYY-mm-dd HH:MM:SS"等格式,则需要处理后端返回时区与本时区时间的偏差。js的Date对象提供getTimezoneOffset函数,用于获取本时区与伦敦协调时的时间差,返回数值的单位是分钟。

        Date对象的toLocaleDateString函数,在PC端和移动端有差别,在安卓移动端会比PC端的返回值多"上午"、"下午"等。

        没有直接使用new Date(value)来获取日期,是因为在IOS系统下,年月日的分隔符只有是"/"的字符串(如"2019/09/09")用new Date(string)得到正确的日期。

        还有另一种格式GMT,相较于UTC格式,GMT没有那么精确,不能具体到毫秒。

        以下内容为追加GMT格式转换

参考:

    JS操作时间 - UNIX时间戳简单介绍  -  阿胜4K

    世界协调时间(UTC)

    MDN Date