经过试验,虽然设置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 对象转换为字符串