Feat: Add support for cyclical dates in special events to avoid yearly updates (#45)

* Feat(fortune): add static date and cyclical date support

* Chore(Fortune): convert static event date to cyclical date

* Docs: Update CONTRIBUTING.md

* Chore(Fortune): Remove old special events

* Fix(Fortune): Correctly set the trigger date for Thanksgiving

* Impr(fortune): Make the code more readable by reducing duplication and lengthy validation blocks
Additionally, strengthen the handling of edge cases (e.g., 31 in February).

* Impr(fortune): Separate the default and user-defined events into different files for easier identification and management

* Docs: Update CONTRIBUTING.md

* Impr(fortune): Simplify events file categorization

* Docs: Update CONTRIBUTING.md

* Docs: Update CONTRIBUTING.md
This commit was merged in pull request #45.
This commit is contained in:
tobiichi3227
2024-12-12 22:48:21 +08:00
committed by GitHub
parent a4d457d9c7
commit 7852572f26
6 changed files with 1081 additions and 210 deletions

View File

@@ -35,11 +35,17 @@ async function fetch_data() {
badFortunes = data.badFortunes;
});
await fetch("./json/special.json")
.then((response) => response.json())
.then((data) => {
special_events = data.special_events;
});
async function fetch_events(path) {
await fetch(path)
.then((response) => response.json())
.then((data) => {
special_events.push(...data.special_events);
});
}
await fetch_events("./json/custom_special.json");
await fetch_events("./json/static_special.json");
await fetch_events("./json/cyclical_special.json");
}
const textColorClass = [
@@ -92,13 +98,91 @@ const day = d.getDay();
const month = d.getMonth() + 1;
const year = d.getFullYear();
function validateNumber(value, min, max, fieldName, event) {
value = parseInt(value);
if (isNaN(value) || value < min || value > max) {
console.warn(`illegal event: ${fieldName} should be between ${min} and ${max}`, event);
return null;
}
return value;
}
function isLeapYear(year) {
if (year % 400 === 0) return true;
if (year % 100 === 0) return false;
if (year % 4 === 0) return true;
return false;
}
const daysPerMonth = [
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
];
const maxDate = new Date(8640000000000000);
function daysDiff(eventIndex) {
// define the date right now and the special event date
const event = special_events[eventIndex];
const startDate = new Date(year, month - 1, date);
let eventYear = -1, eventMonth = -1, eventDate = -1;
if (!('triggerDate' in event)) {
console.warn('illegal event: missing `triggerDate` field', event);
return -1;
} else if (Object.prototype.toString.call(event.triggerDate) !== "[object Object]") {
console.warn('illegal event: `triggerDate` field should be a json object', event);
return -1;
}
const triggerDate = event.triggerDate;
eventYear = year;
if ('year' in triggerDate) {
eventYear = validateNumber(triggerDate.year, 1, maxDate.getFullYear(), 'triggerDate.year', event);
if (eventYear === null) {
return -1;
}
}
if (!('month' in triggerDate)) {
console.warn('illegal event: `triggerDate` missing `month` field', event);
return -1;
}
eventMonth = validateNumber(triggerDate.month, 1, 12, 'triggerDate.Month', event);
if (eventMonth === null) {
return -1;
}
if (!('date' in triggerDate) && (!('week' in triggerDate) || !('weekday' in triggerDate))) {
console.warn('illegal event: `triggerDate` require (`week` and `weekday`) or `date` field', event);
return -1;
}
if ('date' in triggerDate) {
let days = daysPerMonth[eventMonth];
if (isLeapYear(eventYear) && eventMonth == 2) days += 1;
eventDate = validateNumber(triggerDate.date, 1, days, 'triggerDate.date', event);
if (eventDate === null) {
return -1;
}
} else {
triggerDate.week = validateNumber(triggerDate.week, 1, 5, 'triggerDate.week', event);
triggerDate.weekday = validateNumber(triggerDate.weekday, 1, 7, 'triggerDate.weekday', event);
if (triggerDate.week === null || triggerDate.weekday === null) {
return -1;
}
const firstDayOfMonth = new Date(eventYear, eventMonth - 1, 1);
const firstDayWeekday = firstDayOfMonth.getDay();
// Sunday -> 7
const adjustedFirstDayWeekday = firstDayWeekday === 0 ? 7 : firstDayWeekday;
const firstTargetDay = 1 + (triggerDate.weekday - adjustedFirstDayWeekday + 7) % 7;
eventDate = firstTargetDay + (triggerDate.week - 1) * 7;
}
const endDate = new Date(
special_events[eventIndex].year,
special_events[eventIndex].month - 1,
special_events[eventIndex].date,
eventYear,
eventMonth - 1,
eventDate,
);
// calculate the difference in milliseconds and convert it to days
@@ -146,18 +230,23 @@ async function init_page() {
$("#weekday").html(showDay);
const showSpecialEventCount = 2;
let eventIndexPtr = 0, eventIndexList = Array(showSpecialEventCount).fill(-1);
let eventIndexList = Array(showSpecialEventCount).fill(-1);
let eventDiffDaysIndexList = Array(showSpecialEventCount).fill(Number.MAX_SAFE_INTEGER);
// check if there is special event today
for (let i = 0; i < special_events.length; i++) {
if (daysDiff(i) > 0) {
if (
eventIndexPtr < showSpecialEventCount &&
eventIndexList[eventIndexPtr] == -1
) {
eventIndexList[eventIndexPtr] = i;
eventIndexPtr++;
let diffCount = daysDiff(i);
if (diffCount > 0) {
let j = 0;
for (; j < showSpecialEventCount; j++) {
if (diffCount < eventDiffDaysIndexList[j]) {
break;
}
}
} else if (daysDiff(i) == 0) {
eventDiffDaysIndexList[j] = diffCount;
eventIndexList[j] = i;
} else if (diffCount === 0) {
special = true;
special_events_index = i;
}

View File

@@ -0,0 +1,3 @@
{
"special_events": []
}

View File

@@ -0,0 +1,726 @@
{
"special_events": [
{
"event": "元旦",
"triggerDate": {
"month": "1",
"date": "1"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "早起",
"l_1_desc": "心情愉悅迎接新年",
"l_2_event": "大掃除",
"l_2_desc": "新年新氣象"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "國際資料隱私日",
"triggerDate": {
"month": "1",
"date": "28"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "整理資料",
"l_1_desc": "注意在線資料安全",
"l_2_event": "注意隱私",
"l_2_desc": "謹慎上網"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "植樹節",
"triggerDate": {
"month": "3",
"date": "12"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "植樹造林",
"l_1_desc": "保護生態、美化環境",
"l_2_event": "節能減碳",
"l_2_desc": "延長資源壽命"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "白色情人節",
"triggerDate": {
"month": "3",
"date": "14"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "送禮物",
"l_1_desc": "表達愛意和感激之情",
"l_2_event": "觀星",
"l_2_desc": "仰望星空,共描明月"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "世界森林日",
"triggerDate": {
"month": "3",
"date": "21"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "環境教育",
"l_1_desc": "提升對自然的敬重",
"l_2_event": "節約用水",
"l_2_desc": "保護生態系統穩定"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "愚人節",
"triggerDate": {
"month": "4",
"date": "1"
},
"status_index": "3",
"goodFortunes": {
"l_1_event": "喜笑顏開",
"l_1_desc": "與親朋好友分享快樂",
"l_2_event": "開派對",
"l_2_desc": "組織有趣的活動和遊戲"
},
"badFortunes": {
"r_1_event": "冒犯他人",
"r_1_desc": "避免製造觸怒人的笑話",
"r_2_event": "惡作劇",
"r_2_desc": "注意避免不必要的麻煩"
}
},
{
"event": "兒童節",
"triggerDate": {
"month": "4",
"date": "4"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "喜笑顏開",
"l_1_desc": "與親朋好友分享快樂",
"l_2_event": "開派對",
"l_2_desc": "組織有趣的活動和遊戲"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "世界健康日",
"triggerDate": {
"month": "4",
"date": "7"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "健康飲食",
"l_1_desc": "多攝取水果、蔬菜和全穀食品",
"l_2_event": "運動鍛煉",
"l_2_desc": "保持身體健康和活力"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "世界地球日",
"triggerDate": {
"month": "4",
"date": "22"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "環保行動",
"l_1_desc": "參與植樹造林或垃圾回收等環保行動",
"l_2_event": "節能減排",
"l_2_desc": "選擇環保型交通工具"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "世界閱讀日",
"triggerDate": {
"month": "4",
"date": "23"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "推廣閱讀",
"l_1_desc": "激發對知識的渴望",
"l_2_event": "書籍分享",
"l_2_desc": "與他人分享你的書單"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "世界智慧財產權日",
"triggerDate": {
"month": "4",
"date": "26"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "保護創意",
"l_1_desc": "尊重他人的創意和智慧財產權,共同維護創作人的權益",
"l_2_event": "",
"l_2_desc": ""
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "星際大戰日",
"triggerDate": {
"month": "5",
"date": "04"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "電影馬拉松",
"l_1_desc": "播放所有星際大戰電影",
"l_2_event": "感受原力",
"l_2_desc": "May the force be with you, always."
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "世界微笑日",
"triggerDate": {
"month": "5",
"date": "08"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "微笑",
"l_1_desc": "用微笑向世界問好",
"l_2_event": "放慢腳步",
"l_2_desc": "觀察四周的美好事物"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "母親節",
"triggerDate": {
"month": "5",
"week": "2",
"weekday": "7"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "家庭聚餐",
"l_1_desc": "表達對媽媽的感恩之心",
"l_2_event": "",
"l_2_desc": ""
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "世界環境日",
"triggerDate": {
"month": "6",
"date": "05"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "少用塑膠",
"l_1_desc": "選擇可重複使用的替代品",
"l_2_event": "",
"l_2_desc": ""
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "世界獻血者日",
"triggerDate": {
"month": "6",
"date": "14"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "捐血",
"l_1_desc": "捐出血液和血漿,分享生命要時常",
"l_2_event": "",
"l_2_desc": ""
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "巧克力日",
"triggerDate": {
"month": "7",
"date": "07"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "送巧克力",
"l_1_desc": "共享巧克力盛宴",
"l_2_event": "",
"l_2_desc": ""
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "宅宅日",
"triggerDate": {
"month": "7",
"date": "13"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "觀影",
"l_1_desc": "看心愛的電影或影集",
"l_2_event": "閱讀",
"l_2_desc": "享受片刻的寧靜"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "國際冷笑話日",
"triggerDate": {
"month": "7",
"date": "24"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "講冷笑話",
"l_1_desc": "一起嘻嘻哈哈",
"l_2_event": "",
"l_2_desc": ""
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "國際友誼日",
"triggerDate": {
"month": "7",
"date": "30"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "與朋友聯絡",
"l_1_desc": "回憶美好時光",
"l_2_event": "一起出遊",
"l_2_desc": "增進彼此的感情"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "國際左撇子日",
"triggerDate": {
"month": "8",
"date": "13"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "挑戰新事物",
"l_1_desc": "嘗試用左手完成任務",
"l_2_event": "",
"l_2_desc": ""
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "世界攝影日",
"triggerDate": {
"month": "8",
"date": "19"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "拍攝照片",
"l_1_desc": "捕捉生活中的美好瞬間",
"l_2_event": "分享作品",
"l_2_desc": "展示您的攝影技巧"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "國際狗狗日",
"triggerDate": {
"month": "8",
"date": "26"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "陪伴狗狗",
"l_1_desc": "帶狗狗散步或遊玩",
"l_2_event": "分享作品",
"l_2_desc": "展示您的攝影技巧"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "國際慈善日",
"triggerDate": {
"month": "9",
"date": "5"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "捐贈物資",
"l_1_desc": "捐贈物資或金錢,幫助有需要的人",
"l_2_event": "參與志願活動",
"l_2_desc": "參加社區慈善活動,提升社會貢獻"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "國際和平日",
"triggerDate": {
"month": "9",
"date": "21"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "分享愛心",
"l_1_desc": "與他人分享關懷與愛心,促進和平",
"l_2_event": "",
"l_2_desc": ""
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "教師節",
"triggerDate": {
"month": "9",
"date": "28"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "感謝老師",
"l_1_desc": "向老師表達感謝,增進師生情誼",
"l_2_event": "",
"l_2_desc": ""
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "世界糧食日",
"triggerDate": {
"month": "10",
"date": "16"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "節約糧食",
"l_1_desc": "支持可持續的食物系統",
"l_2_event": "捐贈食品",
"l_2_desc": "捐贈食物給有需要的人,傳遞愛心"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "聯合國日",
"triggerDate": {
"month": "10",
"date": "24"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "支持和平",
"l_1_desc": "參與促進世界和平的活動",
"l_2_event": "了解國際事務",
"l_2_desc": "增強全球視野"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "萬聖節",
"triggerDate": {
"month": "10",
"date": "31"
},
"status_index": "4",
"goodFortunes": {
"l_1_event": "扮演角色",
"l_1_desc": "穿上喜愛的角色服裝,享受萬聖節的氛圍",
"l_2_event": "",
"l_2_desc": ""
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "忽略安全",
"r_2_desc": "活動時忽視安全措施可能帶來風險"
}
},
{
"event": "世界善心日",
"triggerDate": {
"month": "11",
"date": "13"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "善待他人",
"l_1_desc": "在生活中多一些善意與寬容",
"l_2_event": "",
"l_2_desc": ""
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "感恩節",
"triggerDate": {
"month": "11",
"week": "4",
"weekday": "4"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "家人團聚",
"l_1_desc": "分享寶貴時光",
"l_2_event": "吃火雞大餐",
"l_2_desc": "Happy Thanksgiving!"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "棉花糖日",
"triggerDate": {
"month": "12",
"date": "07"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "吃棉花糖",
"l_1_desc": "慶祝棉花糖日",
"l_2_event": "",
"l_2_desc": ""
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "貓奴日",
"triggerDate": {
"month": "12",
"date": "15"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "嚕貓",
"l_1_desc": "撫平傷心的心情",
"l_2_event": "喝咖啡",
"l_2_desc": "到貓咪咖啡店去喝咖啡"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "冬至",
"triggerDate": {
"month": "12",
"date": "22"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "吃湯圓",
"l_1_desc": "團團圓圓",
"l_2_event": "保暖",
"l_2_desc": "冬至到了"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "平安夜",
"triggerDate": {
"month": "12",
"date": "24"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "除舊佈新",
"l_1_desc": "平安祥和",
"l_2_event": "交換禮物",
"l_2_desc": "獲得真心的祝福"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "聖誕節",
"triggerDate": {
"month": "12",
"date": "25"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "家庭聚會",
"l_1_desc": "一起團圓吃火雞大餐",
"l_2_event": "注意保暖",
"l_2_desc": "冬至到了"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
}
]
}

View File

@@ -2,9 +2,11 @@
"special_events": [
{
"event": "感恩節",
"year": "2023",
"month": "11",
"date": "23",
"triggerDate": {
"month": "11",
"week": "4",
"weekday": "4"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "家人團聚",
@@ -21,9 +23,10 @@
},
{
"event": "棉花糖日",
"year": "2023",
"month": "12",
"date": "07",
"triggerDate": {
"month": "12",
"date": "07"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "吃棉花糖",
@@ -40,9 +43,10 @@
},
{
"event": "貓奴日",
"year": "2023",
"month": "12",
"date": "15",
"triggerDate": {
"month": "12",
"date": "15"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "嚕貓",
@@ -59,9 +63,10 @@
},
{
"event": "冬至",
"year": "2023",
"month": "12",
"date": "22",
"triggerDate": {
"month": "12",
"date": "22"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "吃湯圓",
@@ -78,9 +83,10 @@
},
{
"event": "平安夜",
"year": "2023",
"month": "12",
"date": "24",
"triggerDate": {
"month": "12",
"date": "24"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "除舊佈新",
@@ -97,9 +103,10 @@
},
{
"event": "聖誕節",
"year": "2023",
"month": "12",
"date": "25",
"triggerDate": {
"month": "12",
"date": "25"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "家庭聚會",
@@ -116,9 +123,10 @@
},
{
"event": "元旦",
"year": "2024",
"month": "1",
"date": "1",
"triggerDate": {
"month": "1",
"date": "1"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "早起",
@@ -133,68 +141,12 @@
"r_2_desc": ""
}
},
{
"event": "學測 Day 1",
"year": "2024",
"month": "1",
"date": "20",
"status_index": "0",
"goodFortunes": {
"l_1_event": "考試",
"l_1_desc": "如願以償,金榜題名",
"l_2_event": "祈禱",
"l_2_desc": "獲得平安、信心"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "學測 Day 2",
"year": "2024",
"month": "1",
"date": "21",
"status_index": "0",
"goodFortunes": {
"l_1_event": "參加測驗",
"l_1_desc": "天道酬勤",
"l_2_event": "安心",
"l_2_desc": "事事順利、心想事成"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "學測 Day 3",
"year": "2024",
"month": "1",
"date": "22",
"status_index": "0",
"goodFortunes": {
"l_1_event": "決戰巔峰",
"l_1_desc": "縱橫考場斬關將",
"l_2_event": "成功",
"l_2_desc": "勢在必得"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "國際資料隱私日",
"year": "2024",
"month": "1",
"date": "28",
"triggerDate": {
"month": "1",
"date": "28"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "整理資料",
@@ -211,9 +163,10 @@
},
{
"event": "植樹節",
"year": "2024",
"month": "3",
"date": "12",
"triggerDate": {
"month": "3",
"date": "12"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "植樹造林",
@@ -230,9 +183,10 @@
},
{
"event": "白色情人節",
"year": "2024",
"month": "3",
"date": "14",
"triggerDate": {
"month": "3",
"date": "14"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "送禮物",
@@ -249,9 +203,10 @@
},
{
"event": "世界森林日",
"year": "2024",
"month": "3",
"date": "21",
"triggerDate": {
"month": "3",
"date": "21"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "環境教育",
@@ -268,9 +223,10 @@
},
{
"event": "愚人節",
"year": "2024",
"month": "4",
"date": "1",
"triggerDate": {
"month": "4",
"date": "1"
},
"status_index": "3",
"goodFortunes": {
"l_1_event": "喜笑顏開",
@@ -287,9 +243,10 @@
},
{
"event": "兒童節",
"year": "2024",
"month": "4",
"date": "4",
"triggerDate": {
"month": "4",
"date": "4"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "喜笑顏開",
@@ -306,9 +263,10 @@
},
{
"event": "世界健康日",
"year": "2024",
"month": "4",
"date": "7",
"triggerDate": {
"month": "4",
"date": "7"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "健康飲食",
@@ -325,9 +283,10 @@
},
{
"event": "世界地球日",
"year": "2024",
"month": "4",
"date": "22",
"triggerDate": {
"month": "4",
"date": "22"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "環保行動",
@@ -344,9 +303,10 @@
},
{
"event": "世界閱讀日",
"year": "2024",
"month": "4",
"date": "23",
"triggerDate": {
"month": "4",
"date": "23"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "推廣閱讀",
@@ -363,9 +323,10 @@
},
{
"event": "世界智慧財產權日",
"year": "2024",
"month": "4",
"date": "26",
"triggerDate": {
"month": "4",
"date": "26"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "保護創意",
@@ -382,9 +343,10 @@
},
{
"event": "星際大戰日",
"year": "2024",
"month": "5",
"date": "04",
"triggerDate": {
"month": "5",
"date": "04"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "電影馬拉松",
@@ -401,9 +363,10 @@
},
{
"event": "世界微笑日",
"year": "2024",
"month": "5",
"date": "08",
"triggerDate": {
"month": "5",
"date": "08"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "微笑",
@@ -420,9 +383,11 @@
},
{
"event": "母親節",
"year": "2024",
"month": "5",
"date": "12",
"triggerDate": {
"month": "5",
"week": "2",
"weekday": "7"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "家庭聚餐",
@@ -439,9 +404,10 @@
},
{
"event": "世界環境日",
"year": "2024",
"month": "6",
"date": "05",
"triggerDate": {
"month": "6",
"date": "05"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "少用塑膠",
@@ -458,9 +424,10 @@
},
{
"event": "世界獻血者日",
"year": "2024",
"month": "6",
"date": "14",
"triggerDate": {
"month": "6",
"date": "14"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "捐血",
@@ -477,9 +444,11 @@
},
{
"event": "夏至",
"year": "2024",
"month": "6",
"date": "20",
"triggerDate": {
"year": "2024",
"month": "6",
"date": "20"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "觀賞日出和日落",
@@ -496,9 +465,10 @@
},
{
"event": "巧克力日",
"year": "2024",
"month": "7",
"date": "07",
"triggerDate": {
"month": "7",
"date": "07"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "送巧克力",
@@ -515,9 +485,10 @@
},
{
"event": "宅宅日",
"year": "2024",
"month": "7",
"date": "13",
"triggerDate": {
"month": "7",
"date": "13"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "觀影",
@@ -534,9 +505,10 @@
},
{
"event": "國際冷笑話日",
"year": "2024",
"month": "7",
"date": "24",
"triggerDate": {
"month": "7",
"date": "24"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "講冷笑話",
@@ -553,9 +525,10 @@
},
{
"event": "國際友誼日",
"year": "2024",
"month": "7",
"date": "30",
"triggerDate": {
"month": "7",
"date": "30"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "與朋友聯絡",
@@ -572,9 +545,10 @@
},
{
"event": "國際左撇子日",
"year": "2024",
"month": "8",
"date": "13",
"triggerDate": {
"month": "8",
"date": "13"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "挑戰新事物",
@@ -591,9 +565,10 @@
},
{
"event": "世界攝影日",
"year": "2024",
"month": "8",
"date": "19",
"triggerDate": {
"month": "8",
"date": "19"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "拍攝照片",
@@ -610,9 +585,10 @@
},
{
"event": "國際狗狗日",
"year": "2024",
"month": "8",
"date": "26",
"triggerDate": {
"month": "8",
"date": "26"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "陪伴狗狗",
@@ -629,9 +605,10 @@
},
{
"event": "國際慈善日",
"year": "2024",
"month": "9",
"date": "5",
"triggerDate": {
"month": "9",
"date": "5"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "捐贈物資",
@@ -648,9 +625,11 @@
},
{
"event": "中秋節",
"year": "2024",
"month": "9",
"date": "17",
"triggerDate": {
"year": "2024",
"month": "9",
"date": "17"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "賞月",
@@ -667,9 +646,10 @@
},
{
"event": "國際和平日",
"year": "2024",
"month": "9",
"date": "21",
"triggerDate": {
"month": "9",
"date": "21"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "分享愛心",
@@ -686,9 +666,10 @@
},
{
"event": "教師節",
"year": "2024",
"month": "9",
"date": "28",
"triggerDate": {
"month": "9",
"date": "28"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "感謝老師",
@@ -705,9 +686,10 @@
},
{
"event": "世界糧食日",
"year": "2024",
"month": "10",
"date": "16",
"triggerDate": {
"month": "10",
"date": "16"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "節約糧食",
@@ -724,9 +706,10 @@
},
{
"event": "聯合國日",
"year": "2024",
"month": "10",
"date": "24",
"triggerDate": {
"month": "10",
"date": "24"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "支持和平",
@@ -743,9 +726,10 @@
},
{
"event": "萬聖節",
"year": "2024",
"month": "10",
"date": "31",
"triggerDate": {
"month": "10",
"date": "31"
},
"status_index": "4",
"goodFortunes": {
"l_1_event": "扮演角色",
@@ -762,9 +746,10 @@
},
{
"event": "世界善心日",
"year": "2024",
"month": "11",
"date": "13",
"triggerDate": {
"month": "11",
"date": "13"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "善待他人",
@@ -778,25 +763,6 @@
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "感恩節",
"year": "2024",
"month": "11",
"date": "28",
"status_index": "0",
"goodFortunes": {
"l_1_event": "家人團聚",
"l_1_desc": "共享寶貴時光",
"l_2_event": "",
"l_2_desc": ""
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
}
]
}

View File

@@ -0,0 +1,46 @@
{
"special_events": [
{
"event": "夏至",
"triggerDate": {
"year": "2025",
"month": "6",
"date": "21"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "觀賞日出和日落",
"l_1_desc": "享受一年最長的白天",
"l_2_event": "",
"l_2_desc": ""
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
},
{
"event": "中秋節",
"triggerDate": {
"year": "2025",
"month": "10",
"date": "6"
},
"status_index": "0",
"goodFortunes": {
"l_1_event": "賞月",
"l_1_desc": "與家人一同賞月,增進感情",
"l_2_event": "吃月餅",
"l_2_desc": "與家人朋友分享月餅的美味"
},
"badFortunes": {
"r_1_event": "",
"r_1_desc": "",
"r_2_event": "",
"r_2_desc": ""
}
}
]
}