填寫標題、地點、日期和時間、時區、重複、受邀人、提醒和備註,然後下載 .ics 檔案或直接在行事曆中開啟。您也可以貼上日程,或附加文件或相片,一次建立多個活動。
什麼是 jCal,它與 .ics 檔案有何不同?
jCal 是以 JSON 撰寫的 iCalendar,於 2014 年標準化為 RFC 7265。它承載與 .ics 檔案完全相同的資料——相同的屬性、參數與元件——只是以巢狀陣列而非物件表示,因為同一個元件的屬性可能重複出現,且順序可能具有意義。一個行事曆是 ["vcalendar", [屬性], [元件]],每個屬性則是 [名稱, 參數, 值型別, 值],因此 SUMMARY:Standup 會變成 ["summary", {}, "text", "Standup"]。這與 JSON-LD 中的 schema.org Event 不同,後者是為搜尋引擎描述事件,保留的資訊遠遠更少。ICS Maker 是從同一個事件模型直接寫出 .ics 與 jCal,而非在兩者之間互相轉換,因此這兩種格式對事件內容不會有分歧。
結構
RFC 7265 將 iCalendar 對應到陣列而非物件,因為在行事曆中順序與重複都具有意義,而 JSON 物件兩者皆無法表達。一個行事曆是 ["vcalendar", [properties], [components]],每個屬性則是 [name, parameters, valueType, value]——名稱一律小寫,參數為一個物件,型別則是 RFC 5545 值型別之一。
因此 SUMMARY:Standup 會變成 ["summary", {}, "text", "Standup"],而含時區的開始時間則會變成 ["dtstart", {"tzid":"Europe/London"}, "date-time", "2026-08-15T09:00:00"]。此處的日期時間採用 ISO 拼寫方式,而非 iCalendar 的緊湊格式,時區則移入參數中。
為什麼值得擁有它
iCalendar 是一種文字格式,具有折行、跳脫規則與 CRLF 換行,正確解析它比看起來要費工夫得多。jCal 將相同的語意——時區、重複規則、提醒、與會者——交給任何已經懂得 JSON 的系統,無需另外撰寫解析器。這與本頁也能產生的 schema.org Event 是不同的任務:JSON-LD 是為搜尋引擎描述事件,並拋棄了行事曆所需的大部分資訊。
本頁如何產生它
這兩種格式都是從同一個事件寫出,而非互相轉換而來。若採用轉換器,會繼承文字格式的所有跳脫決策,而 jCal 的值則是明確不跳脫的——JSON 有自己的引號規則。從單一模型寫出兩種格式,代表它們對事件內容不會有分歧,差異只在於拼寫方式。
常見問題
- 什麼是 jCal?
- jCal 是 iCalendar 的 JSON 格式,於 2014 年標準化為 RFC 7265。它以巢狀 JSON 陣列表示與 .ics 檔案完全相同的資料——相同的屬性、參數與元件——因此可以雙向轉換而不遺失任何含義。
- jCal 是否等同於 JSON-LD 或 schema.org Event?
- 不是。jCal 是 iCalendar 的完整對應,因此它承載重複規則、時區、提醒與與會者出席狀態。JSON-LD 中的 schema.org Event 則是為搜尋引擎與其他讀取者所寫的事件描述,刻意保留遠遠更少的資訊。本產生器會從同一個事件同時產生這兩種格式。
- 為什麼 jCal 使用陣列而非物件?
- 因為行事曆元件可能包含多個相同的屬性——例如多位與會者、多個例外日期——而且順序可能具有意義。以屬性名稱為鍵值的 JSON 物件無法表達這兩者,因此 RFC 7265 改用位置式陣列。
- 誰會讀取 jCal?
- 這是一種小眾格式,在 ical.js 等 JavaScript 行事曆函式庫中獲得良好支援,也可用於數個伺服器端的 iCalendar 工具套件。主流行事曆應用程式仍然預期 .ics 檔案,因此請在自己的系統之間使用 jCal,而將 .ics 檔案交給一般使用者。