1.什么是時間戳?
時間戳是指格林威治時間自1970年1月1日(00:00:00 GMT)至當前時間的總秒數。它也被稱為Unix時間戳(Unix Timestamp)。通俗的講,時間戳是一份能夠表示一份數據在一個特定時間點已經存在的完整的可驗證的數據。
2.使用
var time = new Date(0) console.log(time)
打印出來的結果: Thu Jan 01 08:00:00 CST 1970
是1970年1月1日,實際上時分秒是0點0分0秒(這里打印出來是8點,稍后會作解釋)。
3.為什么最早的時間戳是1970年1月1日?
因為最初計算機操作系統是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秒,這樣便會出現時間回歸的現象,很多軟件便會運行異常了。
此時,時間會定義在1970年1月1日已經有了答案。
因為用32位來表示時間的最大間隔是68年,而最早出現的UNIX操作系統考慮到計算機產生的年代和應用的實現綜合取了1970年1月1日作為UNIX TIME的紀元時間(開始時間),而java自然也遵循了這一約束。
時間回歸的現象相信隨着64位操作系統的產生逐漸得到解決,因為64位操作系統可以表示到292,277,026,596年12月4日15時30分08秒,相信我們的N代子孫,哪怕地球毀滅那天都不用愁不夠用了,因為這個時間已經是千億年以后了。
4.為什么new Date(0)打印出來的時間是8點而非0點?
因為是存在系統時間和本地的時間,其實系統時間依然是0點,只不過我的電腦時區設置為東8區,故打印的結果是8點。