這篇文章是在寫temporal那篇文章時,找資料發現的有趣東西,在那篇文章當中,我有說到目前 date 物件的各種問題,其中第六點是「不支援 Gregorian Calendar(格里曆)以外的日曆(例如農曆)」 ,然後我就好奇起來了,現在還有什麼其他的曆法在用呢?結果找著找著,就看到有個網站提供了很多曆法了線上轉換,像是 Julian Calendar(儒略曆)、Hebrew Calendar(希伯來曆)、Islamic Calendar(伊斯蘭曆)、Persian Calendar(波斯曆)等,用 JavaScript 寫的,而且在程式碼裡面宣告貢獻到 public domain。
然後,我在 fourmilab.ch 上看到了「Three Years Of Computing」這篇文章,標題就吸引了我進去仔細閱讀,這篇文章是在說迴文數(palindrome)挑戰,什麼是迴文數呢,「95277259」就是迴文數,不論是從頭開始還是反過來從尾開始都是相同的數字,那什麼是迴文數問題呢?首先你要拿到一個非迴文數的十進位數字,例如 362 好了,把他和自己的反轉相加:
這篇文章寫到快寫完的時候,決定到Modern Web 2017分享,所以就比較晚發佈 ,其實 Modern Web 演講內容比較多,文末有放相關參考資料。
JSConf EU 2017 前陣子放出演講影片,蠻多場次都不錯,這篇要主要是從其中的一場演講而來,演講是「 The Past, Present, and Future of JavaScript Date and Time APIs」,講者是 Matt Johnson,Moment.js的作者,下面是這場演講的影片:
長度不長,推薦可以看一下,主要是在談 JavaScript 的 Datetime,提出這老東西的問題,我覺得可以稱為 WAT JavaScript 的 Datetime 篇,像是 0 起始的月份、不支援 Time Zone、難以運算、是 mutable 物件等等,接著介紹了目前檯面上比較多人用的幾個 library 和他們的特色,都是品質不錯的 library,有需求的可以從中選用,包括了:
最後則是提到他們目前在進行的,改進 JavaScript Datetime 的計畫,也就是新的 ECMAScript Datetime 的 proposal,叫temporal,除了 Matt Johnson 之外,還有一位 Microsoft 的 Maggie Pint 也是目前草案的主力推手,他的 blog 上就有兩篇相關的文章,裡面有列出目前Date的主要問題:
var ldt = new CivilDateTime(2017, 12, 31, 23, 59);
var addHours = new CivilDateTime(2017, 12, 31, 23, 00)
.add(2, 'hours');
var zdt = ldt.withZone('America/New_York');
可以看到有方便的加減時間的 API、immutable 特性、還有時區支援等等。事實上這份草案還非常初步而已,還缺非常多細節,預期會有的物件目前已經有八種了,不過這八種物件的 API 也都還沒定義完,不過也正因為如此,想參與的人反而這時候比較有機會提供想法,推薦有興趣的人可以關注關注,給點意見。