了解格林尼治标准时间 UTC CST 时间
GMT(Greenwich Mean Time)是格林威治标准时间,英国伦敦格林威治定为0°经线开始的地方,地球每15°经度 被分为一个时区,共分为24个时区,相邻时区相差一小时,GMT格式形如Wed Apr 22 2020 22:51:07 GMT+0800
越往东时间越晚,比如日本(东九区)比北京(东八区)晚一个小时。北京在东八区,即GMT+8,所以北京比GMT时间多了8个小时
UTC(Coordinated Universal Time)是世界协调时间(又称世界标准时间、世界统一时间),经严谨计算得到的时间,精确到秒,误差在0.9s以内, 是比GMT更为精确的世界时间,格式为yyyy-MM-dd'T'HH:mm:ss.SSS'Z',如2020-04-22T15:31:52.000Z
UTC和GMT基本可以当作一个时间,只是UTC更加精确。
所以我们平时看到的UTC时间,比东八区早了8个小时
DST(Daylight Saving Time)是夏季节约时间,即夏令时;是为了利用夏天充足的光照而将时间调早一个小时,北美、欧洲的许多国家实行夏令时。
关于CST时间,百度百科的解释如下:
CST可视为美国、澳大利亚、古巴或中国的标准时间。
CST可以为如下4个不同的时区的缩写:
美国中部时间:Central Standard Time (USA) UT-6:00
澳大利亚中部时间:Central Standard Time (Australia) UT+9:30
中国标准时间:China Standard Time UT+8:00
古巴标准时间:Cuba Standard Time UT-4:00
CST时间格式为EEE MMM dd HH:mm:ss CST yyyy,如Wed Apr 24 16:07:58 CST 2019
也就是说,CST在不同环境下指的是不同的时区。
如果当前CST时间是美国中部时间,那就是西六区,即GMT-6;
如果当前CST时间是中国标准时间,那就是东八区,即GMT+8
chrome控制台cookie的Expires/Max-age就是用UTC时间展示,所以会比实际时间早8小时。
所以我们对cookie设置expires的时候,也要用UTC或GMT时间,例比如下面设置cookie的js代码用了toGMTString方法。
setCookie: function (cname, cvalue, exdays) {
var date = new Date()
date.setTime(date.getTime() + (exdays * 24 * 60 * 60 * 1000))
var expires = 'expires=' + d.toGMTString()
document.cookie = cname + '=' + JSON.stringify(cvalue) + ';path=/;' + expires
}
如果不用GMT格式设置expires,结果如下所示,并没有达到预期效果
var date = new Date()
// 设置有效期为6个小时
date.setTime(date.getTime() + 6 * 3600 * 1000)
console.log(date)
document.cookie = 'age=22;expires=' + date.getTime()
另外推荐一篇时间格式相关bug的文章
https://www.jianshu.com/p/3acd33375c72