现在是哪一天?Date知多少

286 阅读3分钟

缘起:

大佬掏出手机,观测今天的数据, what ? 都11点了,怎么数据还没有产出.RD 忙火起来,排查问题, 没有问题啊.问什么会这样? 遂询问之,大佬出国了,RD口吐鲜血,卒.

本地时间和国际标准时间

在日常开发中,常用的时间相关的有,日期插件,图标插件和直接生成一个日期.这些日期都是采用的本地时间.

so,什么是本地时间呢? 首先得理解时区的概念,全球分为24个时区,每一个时区之中心为相隔15度经线.第一时区的中心位于本初子午线.这个时区以西的地方每隔一个时区慢一个小时,东边则比其快一个小时.大多数地方的本地时间与协调世界时(UTC)的时差为一个正数.中国北京位于东八区,即日常采用的本地时间为东八区的时间.

那么如何指定特定的时区呢

// 已知本地时间,换算其他时区的时间
// 因为时区间的差异是以小时为单位的。所以算出0时区的时间后,再减去或加上相应的小时即可(东N区便+N小时,西N区便-N小时)。 为了方便计算,东N区记做正数,西N区记做负数,即:
// 目标时区时间 = 本地时间 + 时差 + 时区间隔
// 格林威治时间 = 本地时间 + 时差
// 目标地区的时区  
var zoneOffset = 8;
//本地时间和格林威治的时间差,单位为分钟,转换为毫秒:
var offset2 = new Date().getTimezoneOffset()* 60 * 1000;
//算出现在的时间:本地时间距 1970 年 1 月 1 日午夜(GMT 时间)之间的毫秒数
var nowDate2 = new Date().getTime();
//此时东2区的时间
var currentZoneDate = new Date(nowDate2 + offset2 + zoneOffset*60*60*1000);


console.log("东8区现在是:"+currentZoneDate);
// 东8区现在是:Wed Feb 20 2019 10:45:19 GMT+0800 (CST)
// CST 大中华地区时区

本次主要修改: 前后端统一指定为北京时间,前端highcharts修改

// highcharts 修改时区
highcharts.setOption({
    useUTC: true, // 默认配置
    global: {timezoneOffset: -8*60}
})
// echarts 默认设置 useUTC: fasle . 没有直接改变时区的api.采用的是本地时间进行计算.在前端进行传递日期时,需先转换为特定时区的时间,后端返回时,也需要标注时区等相关信息.

后记:

开发中很少关注,如果你的用户出国受到的影响..引来了对于项目中国际化的一些思考.例如: 货币,日期,地域,语言等.

其他时间知识

GMT和UTC时间 UTC是我们现在用的时间标准,GMT是老的时间计量标准。UTC是根据原子钟来计算时间,而GMT是根据地球的自转和公转来计算时间,也就是太阳每天经过位于英国伦敦郊区的皇家格林威治天文台的时间就是中午12点.一般认为 UTC=GMC.