Spaces:
Running
Running
| // ============================================================ | |
| // Time Adapter — Trả lời câu hỏi thời gian/ngày tháng/thứ | |
| // Phụ thuộc: currentLang, _adapterPath | |
| // ============================================================ | |
| var TIME_KEYWORDS = { | |
| vi: { time: ['mấy giờ', 'giờ', 'thời gian'], date: ['ngày mấy', 'hôm nay', 'ngày tháng'], day: ['thứ mấy', 'thứ'] }, | |
| en: { time: ['what time', 'time', 'clock'], date: ['what date', 'today', 'date'], day: ['what day', 'day'] }, | |
| ja: { time: ['何時', '今何時', '時間'], date: ['今日', '何日', '日付'], day: ['何曜日', '曜日'] } | |
| }; | |
| var DAY_NAMES = { | |
| vi: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'], | |
| en: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], | |
| ja: ['日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'] | |
| }; | |
| var MONTH_NAMES_EN = [ | |
| 'January', 'February', 'March', 'April', 'May', 'June', | |
| 'July', 'August', 'September', 'October', 'November', 'December' | |
| ]; | |
| function timeAdapter(rs, args) { | |
| _adapterPath.push('time_adapter'); | |
| var input = (args || []).join(' ').trim().toLowerCase(); | |
| var lang = currentLang || 'vi'; | |
| var keywords = TIME_KEYWORDS[lang] || TIME_KEYWORDS['vi']; | |
| var now = new Date(); | |
| for (var i = 0; i < keywords.time.length; i++) { | |
| if (input.indexOf(keywords.time[i].toLowerCase()) !== -1) return formatTime(now, lang); | |
| } | |
| for (var j = 0; j < keywords.date.length; j++) { | |
| if (input.indexOf(keywords.date[j].toLowerCase()) !== -1) return formatDate(now, lang); | |
| } | |
| for (var k = 0; k < keywords.day.length; k++) { | |
| if (input.indexOf(keywords.day[k].toLowerCase()) !== -1) return formatDay(now, lang); | |
| } | |
| if (lang === 'en') return "I don't understand your time request."; | |
| if (lang === 'ja') return '時間に関するリクエストが理解できませんでした。'; | |
| return 'Mình không hiểu yêu cầu về thời gian của bạn.'; | |
| } | |
| function formatTime(date, lang) { | |
| var hours = date.getHours(); | |
| var minutes = date.getMinutes(); | |
| var mm = minutes < 10 ? '0' + minutes : String(minutes); | |
| if (lang === 'en') { | |
| var period = hours >= 12 ? 'PM' : 'AM'; | |
| var h12 = hours % 12; | |
| if (h12 === 0) h12 = 12; | |
| return h12 + ':' + mm + ' ' + period; | |
| } else if (lang === 'ja') { | |
| return hours + '時' + mm + '分'; | |
| } | |
| var hh = hours < 10 ? '0' + hours : String(hours); | |
| return hh + ':' + mm; | |
| } | |
| function formatDate(date, lang) { | |
| var day = date.getDate(); | |
| var month = date.getMonth(); | |
| var year = date.getFullYear(); | |
| if (lang === 'en') return MONTH_NAMES_EN[month] + ' ' + day + ', ' + year; | |
| if (lang === 'ja') return year + '年' + (month + 1) + '月' + day + '日'; | |
| var dd = day < 10 ? '0' + day : String(day); | |
| var mmStr = (month + 1) < 10 ? '0' + (month + 1) : String(month + 1); | |
| return dd + '/' + mmStr + '/' + year; | |
| } | |
| function formatDay(date, lang) { | |
| var dayIndex = date.getDay(); | |
| var names = DAY_NAMES[lang] || DAY_NAMES['vi']; | |
| return names[dayIndex]; | |
| } | |
| // Node/test: export to globalThis | |
| if (typeof module !== 'undefined' && module.exports) { | |
| globalThis.TIME_KEYWORDS = TIME_KEYWORDS; | |
| globalThis.DAY_NAMES = DAY_NAMES; | |
| globalThis.MONTH_NAMES_EN = MONTH_NAMES_EN; | |
| globalThis.timeAdapter = timeAdapter; | |
| globalThis.formatTime = formatTime; | |
| globalThis.formatDate = formatDate; | |
| globalThis.formatDay = formatDay; | |
| } | |