UNPKG

@cometchat/chat-uikit-react-native

Version:

Ready-to-use Chat UI Components for React Native

128 lines 4.45 kB
// TODO: Fix the logics - as currently it is inefficient and non-readable class DateHelper { /** * Pattern for Date. * one of * 1. timeFormat: "hh:mm a". * 2. dayDateFormat: Today, Yesterday, weekday or "d MMM, yyyy". * 3. dayWeekDayDateTimeFormat: Today(time), weekday, Yesterday, or "dd/mm/yyyy". */ static patterns = { timeFormat: "timeFormat", dayDateFormat: "dayDateFormat", dayWeekDayDateFormat: "dayWeekDayDateFormat", dayWeekDayDateTimeFormat: "dayWeekDayDateTimeFormat", dayDateTimeFormat: "dayDateTimeFormat", callBubble: "d MMM, hh:mm aa", callLogs: "d MMMM, h:m aa", }; static monthNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", ]; static weekNames = [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", ]; getWeekOfDay(date) { let weekDay = date.getDay(); let week = DateHelper.weekNames[weekDay]; return week.substring(0, 3); } getMonthOfDay(date, full = false) { let month = date.getMonth(); let mnth = DateHelper.monthNames[month]; if (full) return mnth; return mnth.substring(0, 3); } getDateFormat(date, pattern) { if (pattern === DateHelper.patterns.dayDateFormat) { return date.getDate() + " " + this.getMonthOfDay(date) + ", " + date.getFullYear(); } let dt = date.getDate(); if (dt < 10) { dt = "0" + dt; } return dt + "/" + (date.getMonth() + 1) + "/" + date.getFullYear(); } getTimeFormat(date) { let timeString = date.getHours(); let postString = timeString >= 12 ? "PM" : "AM"; if (timeString > 12) { timeString = timeString - 12; } let minutes = date.getMinutes(); if (minutes < 10) minutes = "0" + minutes; return timeString + ":" + minutes + " " + postString; } getDate(date, pattern) { const today = new Date(); if (today.getMonth() === date.getMonth() && today.getFullYear() === date.getFullYear()) { let diff = today.getDate() - date.getDate(); if (diff === 0) { if (pattern === DateHelper.patterns.dayWeekDayDateTimeFormat) { return this.getTimeFormat(date); } return "Today"; } else if (diff === 1) { return "Yesterday"; } else if (diff < 7 && [DateHelper.patterns.dayWeekDayDateTimeFormat, DateHelper.patterns.dayWeekDayDateFormat].includes(pattern)) { return this.getWeekOfDay(date); } else { return this.getDateFormat(date, pattern); } } else { return this.getDateFormat(date, pattern); } } getFormattedDate(timestamp, pattern) { const date = new Date(timestamp); if (pattern && pattern != null) { let formattedDate = ""; switch (pattern) { case DateHelper.patterns.timeFormat: formattedDate = this.getTimeFormat(date); break; case DateHelper.patterns.dayDateFormat: case DateHelper.patterns.dayWeekDayDateFormat: case DateHelper.patterns.dayWeekDayDateTimeFormat: case DateHelper.patterns.dayWeekDayDateTimeFormat: formattedDate = this.getDate(date, pattern); break; case DateHelper.patterns.callBubble: formattedDate = `${date.getDate()} ${this.getMonthOfDay(date)}, ${this.getTimeFormat(date)}`; case DateHelper.patterns.callLogs: formattedDate = `${date.getDate()} ${this.getMonthOfDay(date, true)}, ${this.getTimeFormat(date).toLowerCase()}`; break; default: break; } return formattedDate; } return null; } } export { DateHelper }; export const dateHelperInstance = new DateHelper(); //# sourceMappingURL=dateHelper.js.map