人类操作系统元年
目前,人类计算机通过一个64位整数来存储时间,它表示从西方时间(伦敦)1970年1月1日0点开始到现在所经过的毫秒数,比如:
> Date.now()
< 1553735643986
为啥从1970年初开始计时呢,有一个原因是,现代人类操作系统的共同祖先----unix是在1970年正式诞生的,1970年可称为"UNIX元年"。我们都知道 ,硬件计时必须要常驻机器的OS来维护,所以,当UNIX出现以后,各种需要调用时间api的应用才相应出现,对于目前来说也是一样,软件史上的重要事件都发生在1970年之后,这个时间点不大不小正正好,1970年之前的时间点可以使用负数表示。
还有一个原因,最初计算机操作系统是32位,时间也就用32位表示。32位能表示的最大值是2147483647。另外1年365天的总秒数是31536000,2147483647/31536000 = 68.1,也就是说32位能表示的最长时间是68年,而实际上到2038年01月19日03时14分07秒,便会到达最大时间,过了这个时间点,所有32位操作系统时间便会变为10000000 00000000 00000000 00000000,也就是1901年12月13日20时45分52秒,这样便会出现时间回归的现象,很多软件便会运行异常了。
到这里,我想问题的答案已经出来了:因为用32位来表示时间的最大间隔是68年,而最早出现的UNIX操作系统考虑到计算机产生的年代和应用的时限综合取了1970年1月1日作为UNIX TIME的纪元时间(开始时间),至于时间回归的现象相信随着64为操作系统的产生逐渐得到解决,因为用64位操作系统可以表示到292,277,026,596年12月4日15时30分08秒,这个时间已经是千亿年以后了。
Worldwide Scope的全局变量
全局变量都很熟悉,比如浏览器窗口中的window对象,非常实用。
我们目前接触到的全局变量都是进程级别或者更大一点就是系统级别的,但有没有想过有一个全局变量是“全球”级别的,也就是“全球对象”,而且不需要通过互联网同步!没错,这就是Date对象:无论生在何处,相距多远,你们总是share一个相同的数据:当前的时间(假设宇宙时间均匀(●'◡'●))。那利用全球对象Date能做哪些不可描述的事情呢?比如在断网的情况下进行同步任务;或者将Date作为种子生成相同的2个随机数。。。事实上我们一直在利用‘时间’来揣测对方的情况。