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

JavaScript018

如何在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啦

使用世界时来表达就行了,北京时间是第8时区,将世界时加上8小时就是北京时间。

var nowTime = new Date(new Date().getTime()+8*60*60*1000)

北京时间显示为:

nowTime.toUTCString()

获取年月日全都使用世界时方法:

getUTCDate() 根据世界时从 Date 对象返回月中的一天 (1 ~ 31)

getUTCDay() 根据世界时从 Date 对象返回周中的一天 (0 ~ 6)

getUTCMonth() 根据世界时从 Date 对象返回月份 (0 ~ 11)

getUTCFullYear() 根据世界时从 Date 对象返回四位数的年份

getUTCHours() 根据世界时返回 Date 对象的小时 (0 ~ 23)

getUTCMinutes() 根据世界时返回 Date 对象的分钟 (0 ~ 59)

getUTCSeconds() 根据世界时返回 Date 对象的秒钟 (0 ~ 59)

getUTCMilliseconds() 根据世界时返回 Date 对象的毫秒(0 ~ 999)

字符串2013-10-05T02:00:00.000+09:30可以使用split方法分割

var fromDate= "2013-10-05T02:00:00.000+09:30".split('T').shift().split('-') //得到["2013", "10", "05"]

如此就可以设置进Date对象

-----------------

如果不想与本地时区有关联的话就统一用UTC的方法好了

具体时区再自己计算

比如,+9:30区

var d = new Date()

//9小时就是9*60分钟,加上30分钟,再转换为毫秒

d.setTime(d.getTime()+(9*60+30)*60*1000)

d.toUTCString()

-----------------

Date对象的UTC有关的方法:

getUTCDate() 根据世界时从 Date 对象返回月中的一天 (1 ~ 31)

getUTCDay() 根据世界时从 Date 对象返回周中的一天 (0 ~ 6)

getUTCMonth() 根据世界时从 Date 对象返回月份 (0 ~ 11)

getUTCFullYear() 根据世界时从 Date 对象返回四位数的年份

getUTCHours() 根据世界时返回 Date 对象的小时 (0 ~ 23)

getUTCMinutes() 根据世界时返回 Date 对象的分钟 (0 ~ 59)

getUTCSeconds() 根据世界时返回 Date 对象的秒钟 (0 ~ 59)

getUTCMilliseconds() 根据世界时返回 Date 对象的毫秒(0 ~ 999)

setUTCDate() 根据世界时设置 Date 对象中月份的一天 (1 ~ 31)

setUTCMonth() 根据世界时设置 Date 对象中的月份 (0 ~ 11)

setUTCFullYear() 根据世界时设置 Date 对象中的年份(四位数字)

setUTCHours() 根据世界时设置 Date 对象中的小时 (0 ~ 23)

setUTCMinutes() 根据世界时设置 Date 对象中的分钟 (0 ~ 59)

setUTCSeconds() 根据世界时设置 Date 对象中的秒钟 (0 ~ 59)

setUTCMilliseconds() 根据世界时设置 Date 对象中的毫秒 (0 ~ 999)

toUTCString() 根据世界时,把 Date 对象转换为字符串