关于javascript中UTC时间、GMT时间、当地时间的困惑

1、js中的默认哪种标准时间?
据MDN上定义的Date对象,js的时间是基于1970年1月1日的UTC时间,为什么通过控制台打印的是GMT时间?
然后有人说:一般认为GMT和UTC是基本一样的,都与英国伦敦的本地时相同,UTC的本质强调的是比GMT更为精确的世界时间标准.它其实是个更精确的GMT,既然如此为什么js没有把new Date() 改成UTC时间呢?而且还有许多内置的UTC相关的转换方法。

2、和本地时间(北京时间CST)的混淆
我们实际生活中用的却是北京时间即CST时间,它和UTC/GMT相差8个小时,那么通过 new 出来的当前时间究竟是什么时间,是否包含8小时的时差?
Mon Sep 10 2018 11:22:55 GMT+0800 (中国标准时间)

阅读 7.2k
3 个回答
输出的是北京时间 也就是GMT||UTC + 8小时时差

GMT + 0800 表示就是 GTM(格林尼治时间) + 0800(正八时区)

时间戳,控制台打印的是toString执行的结果,根据 ecma 的规范,执行的是 ToDateString 方法,那么这个方法是怎么定义的呢?

The toDateString() method returns the date portion of a Date object in human readable form in American English.

所以其实并不是一个标准,比如在firefox就不是GMT时间

1.js中的默认哪种标准时间? -> 这个要取决于你在哪里看,比如 chrome/IE的控制台,那就取决于它们怎么实现的,采用的默认显示是哪一个 --所以这个跟引擎有关

2.以chrome浏览器为例:

let d = new Date();
d // Mon Sep 10 2018 13:33:47 GMT+0800 (中国标准时间)    --GMT+0800 这个就是东八区的意思 ,加了8小时的时差的

可以看到这明显是一个加了时区的时间

d.getUTCHours() 
//5

d.getHours()
//13
d.toGMTString()
//"Mon, 10 Sep 2018 05:33:47 GMT"
d.toLocaleString()
//"2018/9/10 下午1:33:47"

至于存在方法的方法名等就不能深究太多了吧,因为代码都是程序员写出来的,有可能后面进行维护的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题