搜尋
首頁web前端js教程Javascript中的時間

Javascript中的時間

Nov 08, 2016 pm 02:23 PM
javascript

我們在程式設計時,不可避免地會和時間打交道。 例如要完成一次秒殺活動, 就會牽涉到時間存取,時間同步和時間差值計算等諸多細節。一個JavsScript的簡單例子,當我們在瀏覽器控制台輸入new Date(), 會得到以下結果:

Sun Oct 30 2016 16:27:04 GMT+0800 (CST)

輸出前半部分容易理解, 它代表的是2016年10月30日星期日,下午16點27分04秒, 後半部分的GMT,+0800, CST到底代表什麼呢, 本著一探究竟的想法, 本文來帶大家詳細了解下JS中的時間。

1.時間的表示

在古代, 天文學的一個最重要任務就是度量時間,制定曆法。我國古代將一年分為十二月、二十四節氣,一天分為十二個時辰,目的就是為了一套高效的時間表示方法用以指導農耕。隨著現代社會的發展,時間的表示也需要一套更科學精確的方法。

度量

從計時工具說起

遠古時代,人類是根據太陽與地球的角度變化來作息的, 人們都是日出而作, 日落而息, 人類一直遵循著這種延續下來的作息規律。這時的人們對於時間沒有特別的概念,也不用計時工具。

在中國周代,人們將一天分為12個時辰:子、醜、寅、卯、辰、巳、午、未、申、酉、戊、亥,分別對應夜半、雞鳴、平旦、日出、食時、隅中、日中、日昳、晡時、日入、黃昏、人定。用來指導人們一天的生活規律。這時,我們用沙漏、日晷來記錄大致的時間,可以區別出來的最短時間是1個時辰(2h)。

後來,工業革命將人類帶入了工業時代,此時人們對於時間有了更精細的劃分,一天被分為12個小時, 每小時60分, 每分60秒。為了更有效率地生產,我們用鐘錶來記錄時間,我們對於時間的使用也達到了秒級。

而現在,我們的計時工具已經升級成了冷原子鐘。 例如我國的北斗導航衛星系統使用的就是原子鐘來記錄時間,其計時精度已達到奈秒等級(1ns=10^-9s)。我們已將空間和時間結合到了一起,可以透過時間來推算空間,在空間中轉換時間。

ps: 曾經在園區聽過中科院博導徐穎關於北斗的演講, 不禁為人類的創造力和中國的強大國力所折服。

隨著人類文明的進步,計時工具也不斷地發展。借助這些工具,人類對於時間的劃分越來越細, 對於時間資源的使用率也越來越高。

時間單位

我們用時間單位來表達特定的時間間隔,常用的時間單位如: 世紀、年、季度、月、日、小時、分、 秒、 毫秒、微妙、奈秒等。目前人類可以測量的最短的時間單位是阿秒(attosecond),為中性π介子的壽命, 相當於10^-18 秒。

可以說,人們時間的細分過程和標準制定過程,其實是人類探索時間,利用時間的過程。 我們對於時間單位的認知,可以從側面反映我們對自己所處的時空的認知。時間單位也折射出人類科學文明的發展歷程。

時刻

我們平常常說,現在9點鐘了, 其實指的就是時刻。我們要表達的是目前已經達到9點這個時間點了。它是既沒有大小也沒有方向的,它只表達一個具體的時間點。 就好比我們用尺來衡量長度, 我們也在用一把標記著秒,小時的「尺」來衡量時間。而時刻,只是我們都可理解的尺上的某一個刻度。唯一的差異是, 空間中的長度通常是不變的, 而時間永遠是不可逆地增加的。

2. 時間標準化

首先,我們應認識到,在整個宇宙中, 時間是統一的。 從宇宙的誕生到現在, 總是可以用一個特定的時間間隔值來表示我們所經歷的時間,它是一個固定的值。 那我們不禁會問為什麼會說我們這裡是早上9點,而英國那邊確是凌晨1點呢,這不是兩個不同的時間嗎?這就要引出我們下面將要提到的時間標準問題。

在以前,人類的活動範圍相對狹小,基本上不會注意到時區對於人類作息的影響。我們完全想像不到, 當我們在陽光下辛勤工作的時候, 地球另一面的人們早已進入夢鄉。

但是工業革命之後,人類的生產和交通工具不斷進步,全球化協作成為不可阻擋的潮流。 此時人們已經意識到了地球在不停地自西向東自轉, 自轉一周則為一日。而不同經度的地區日出的時間是有先後差異的。例如中國北京還是正午的時候,大洋彼岸的美國紐約正好是深夜。早上8點我們一個電話打過去, 說美國的XXX, 該上班了, 對方一定是一臉的迷(meng)茫(bi), 我這準備洗洗睡呢。

正是人們認識到地球自轉的天文規律,才需要製定一套全球統一的時間標準,這樣,我們根據本地時間就可以推算出地球任何地區的當地時間(日出日落時間),以方便進行更好的協作。

格林尼治平時(Greenwich Mean Time, GMT)

格林尼治是位於英國倫敦郊區的皇家格里尼治天文台, 我們常說的格林尼治時間指的就是以此地的時間為標準時間制定的一套時間計量系統。

為了準確地表示各地時間,1884年,國際經度會議決定將通過英國格林尼治天文埃里中星儀的經線定為計算經度的起算經線,稱為本初子午線。以本初子午線的平子夜起算的平太陽時,分別向東、西計量增減12時,作為統一的時間標準,稱為格林尼治平時。這也就是GMT時間的由來,它是根據地球的自轉所定義的一套時間標準,其對於日常生活, 天文導航和宇宙飛行等人類活動具有重要作用。

GMT的製定同時也產生了時區的概念。我們在聽關於國外的新聞報道的時候,常常會聽到於當地時間XX時XX分,本地時間yy時yy分發生了什麼大事,然後是balabala。 這其實就是在時間的表示上避免位於不同時區的人對於時間理解的差異。

時區(Time Zone), 設定了一個區域的標準時間。 理論上, 以被15整除的子午線為中心, 向東西各延伸7.5經度,劃分為一個時區。實際上,由於各國的版圖不規則, 通常會跨越多個時區, 所以國家內部還會規定整個行政區域內的一個實際時區,稱為法定時區。例如中國, 從西到東橫跨東五、東六、東七、東八和東九五個時區, 中華人民共和國成立以後,全國統一採用首都北京所在的東八時區的區時作為標準時間,稱為北京時間。

協調世界時(Coordinated Universal Time, UTC)

UTC通常被誤認為是GMT, 其實兩者的表示方式完全不同。

UTC的由來

人類觀測到地球自轉的緩慢下降,地球自轉一周耗時經過一段時間後會多於現行的24小時,因此GMT時間已不再適合作為標準時間使用。現在的標準時間是由原子鐘報時的協調世界時,這是由國際計量局和國際地球自轉服務(IERS)維護的時間標度,是各標準頻率和時間信號協協調播發基準。

那為什麼又要搞個UTC呢,太亂了吧? 其實誰也不想這麼麻煩, 這是地球自己「轉」出來的。

我們常識性認為地球自轉一周是24小時,而由於地球自轉速度變慢,在經過了24h之後,地球可能還沒有成一周的運轉, 為了保證24h和地球完整的一周相匹配,就必須讓鐘錶上的時間等待地球自轉一周完成,這就是協調世界時中「協調」二字的含義。 UTC時間相較於國際原子鐘時間(International Atomic Time, TAI)實際上是慢的。

註:秒是基本的時間國際單位,國際上現在標準的1秒為:銫133原子基態的兩個超精細能階間躍遷對應的輻射的9,192,631,770個週期的持續時間

說白了,TAI時間是基於原子規律定義的時間,而這個時間長時間不會改變。 UTC是為了符合地球自轉週期所製定的時間, UTC會讓全球的鐘錶都停下來,補上地球自轉變慢的差值, 而矯正和同步機構就是IERS。全球所有國家根據UTC時間和各自國家所在的時區來確定當地時間,以確保全球時間的低誤差同步。

閏秒

UTC以加入閏秒(leap-secons)的方式對時間進行修正,以消除地球自轉變慢的影響。閏秒是為了平衡地球自轉變慢所引起的和原子鐘的時間差而刻意設定的。如果不加入閏秒,可能過幾萬年後,中午的12點會變成凌晨0點; 再過個幾百萬年,日曆上的冬天會變成了夏天了,那麼整個生產生活就會亂套了。

閏秒的引入時機是每年的6月和12月月末, 視UTC-TAI的演變差值而定,並且每隔六個月會公佈是否需要加入閏秒(這就是IERS幹的活兒) 。

上次閏秒的引入時間是UTC 2015-6-30 23:59:60 而下一次的閏秒引入會在:

2016-12-31 23:59:592016-12-31 2323 :602017-01-01 00:00:00

從2015-07-01 00:00:00 UTC 到2017-01-01 00:00:00 UTC 時間差異是: UTC -AI = -就是說,我們的UTC時間標準相較於真正的原子鐘時間,人為地慢了36秒。

PS1: 是不是覺得自己賺到了, 多活了36s呢! PS2: 人類目前所花的時間大多都已經是UTC時間了, 但是很多時候還保留著GMT的時區劃分規則,所以很多地方顯示的還是GMT時間。

北京時間(China Standard Time, CST)

再來說一下我國的時間基準, 北京時間不是在北京確定的,而是由位於中國版圖幾何中心位置陝西臨斃和陝西蒲城的中國科學院國家授時中心(國家授時台)的9台銫原子鐘(銫鐘)和2台氫原子鐘組透過精密比對和計算實現,並透過衛星與世界各國授時部門進行即時比對確定的。國內的設備可以透過國家授時中心提供的NTP(Network Time Protocol)伺服器和本地時間進行同步。具體使用可以參考此處。

在Mac上, 可以透過下列指令和製定的NTP伺服器進行校時:

➜ ~ sudo ntpdate -u cn.pool.ntp.org
1 Nov 03:20:08 ntpdate[84376]: adjust time server 59.46.44.253 offset 0.014804 sec
➜ ~

3. 小結

再回到文章最開始所提到的, new Date()在輸出數據, 所有的內容就清晰了:再回到文章最開始所提到的, new Date()在輸出數據, 所有的內容就清晰了:3: ,但此處的GMT所表示的意思是:時間使用的時區是GMT標準,時間採用的是UTC時間

+0800 代表的是當前時間和標準時間的時差, 精確到分。 +0800, 表示目前時間早於UTC時間8小時整

CST 指的是北京時間

done!

4. 後記

一門程式設計語言中有很多細節, 往往蘊含著極大的智慧。以本文提到的時間為例, 幾個簡單的單詞, 其中蘊含了人類近幾百年的科技文明發展成果,也反映了人類對於時間的尊重和敬畏,每一處都值得細細品味。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript引擎:比較實施JavaScript引擎:比較實施Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

超越瀏覽器:現實世界中的JavaScript超越瀏覽器:現實世界中的JavaScriptApr 12, 2025 am 12:06 AM

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

使用Next.js(後端集成)構建多租戶SaaS應用程序使用Next.js(後端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:23 AM

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

如何使用Next.js(前端集成)構建多租戶SaaS應用程序如何使用Next.js(前端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:22 AM

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript:探索網絡語言的多功能性JavaScript:探索網絡語言的多功能性Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的演變:當前的趨勢和未來前景JavaScript的演變:當前的趨勢和未來前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

神秘的JavaScript:它的作用以及為什麼重要神秘的JavaScript:它的作用以及為什麼重要Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python還是JavaScript更好?Python還是JavaScript更好?Apr 06, 2025 am 12:14 AM

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器