1/** 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15import common from '../data/commonData'; 16import HiLog from './HiLog'; 17 18// Time constant 19const ONE_MINUTE_IN_MILLISECOND = 60000; 20const ONE_HOUR_IN_MILLISECOND = 3600000; 21 22const TAG = 'DateUtil'; 23 24export default { 25 26 /** 27 * Converts the timestamp of an item to a time (for the SMS message list). 28 * 29 * @param messageItem 30 * @param is24HourTime 31 * @return 32 */ 33 convertDateFormatForItem(messageItem, is24HourTime) { 34 let now = new Date(); 35 let currentDate = { 36 timeOfNow: now.getTime(), 37 yearOfNow: now.getFullYear(), 38 monthOfNow: now.getMonth() + 1, 39 dayOfNow: now.getDate() 40 }; 41 let timeMillisecond = messageItem.timeMillisecond; 42 messageItem.time = this.convertTimeStampToTime(timeMillisecond, currentDate, is24HourTime); 43 }, 44 45 /** 46 * Converting a Timestamp to a Time (for SMS List) 47 * 48 * @param timeStampFromDb Timeline to be converted 49 * @param currentDate Current Time 50 * @param is24HourTime 51 * @return 52 */ 53 convertTimeStampToTime(timeStampFromDb, currentDate, is24HourTime) { 54 let sms = new Date(timeStampFromDb); 55 let timeStampOfSms = sms.getTime(); 56 let yearOfSms = sms.getFullYear(); 57 let monthOfSms = sms.getMonth() + 1; 58 let dayOfSms = sms.getDate(); 59 let hoursOfSms = sms.getHours(); 60 let minutesOfSms = sms.getMinutes(); 61 let diff = currentDate.timeOfNow - timeStampOfSms; 62 if (currentDate.yearOfNow == yearOfSms && currentDate.monthOfNow == 63 monthOfSms && currentDate.dayOfNow == dayOfSms) { 64 if (diff < ONE_MINUTE_IN_MILLISECOND) { 65 return $r('app.string.justNow'); 66 } else if (diff < ONE_HOUR_IN_MILLISECOND) { 67 return $r('app.string.minAgo', Math.floor(diff / ONE_MINUTE_IN_MILLISECOND)); 68 } else { 69 let hoursOfSmsStr: string = '' + hoursOfSms; 70 let minutesOfSmsStr: string = '' + minutesOfSms; 71 if (hoursOfSms < 10) { 72 hoursOfSmsStr = '0' + hoursOfSms; 73 } 74 if (minutesOfSms < 10) { 75 minutesOfSmsStr = '0' + minutesOfSms; 76 } 77 if (is24HourTime) { 78 return $r('app.string.hourAndMinute', hoursOfSmsStr, minutesOfSmsStr); 79 } else { 80 return this.timeTwelveHourSystem(hoursOfSms, minutesOfSmsStr, hoursOfSmsStr); 81 } 82 } 83 } else if (currentDate.yearOfNow == yearOfSms && currentDate.monthOfNow == 84 monthOfSms && currentDate.dayOfNow - dayOfSms == 1) { 85 return $r('app.string.yesterday'); 86 } else if (currentDate.yearOfNow == yearOfSms) { 87 return $r('app.string.monthDay', monthOfSms, dayOfSms); 88 } else { 89 return $r('app.string.yearMonthDay', yearOfSms, monthOfSms, dayOfSms); 90 } 91 }, 92 93 timeTwelveHourSystem(hoursOfSms, minutesOfSmsStr, hoursOfSmsStr) { 94 let time: Resource = null; 95 if (hoursOfSms <= 12) { 96 time = this.morningTimeTwelveHourSystem(hoursOfSms, minutesOfSmsStr, hoursOfSmsStr); 97 } else { 98 time = this.afterTimeTwelveHourSystem(hoursOfSms, minutesOfSmsStr, hoursOfSmsStr); 99 } 100 return time; 101 }, 102 103 morningTimeTwelveHourSystem(hoursOfSms, minutesOfSmsStr, hoursOfSmsStr) { 104 let time: Resource = null; 105 // 12-hour clock 106 if (hoursOfSms < 1) { 107 time = $r('app.string.postMidnight', 12 + '', minutesOfSmsStr); 108 } 109 if (hoursOfSms >= 1 && hoursOfSms < 4) { 110 time = $r('app.string.beforeDawn', hoursOfSmsStr, minutesOfSmsStr); 111 } 112 if (hoursOfSms >= 4 && hoursOfSms < 6) { 113 time = $r('app.string.earlyMorning', hoursOfSmsStr, minutesOfSmsStr); 114 } 115 if (hoursOfSms >= 6 && hoursOfSms < 9) { 116 time = $r('app.string.morning', hoursOfSmsStr, minutesOfSmsStr); 117 } 118 if (hoursOfSms >= 9 && hoursOfSms < 11) { 119 time = $r('app.string.forenoon', hoursOfSmsStr, minutesOfSmsStr); 120 } 121 if (hoursOfSms >= 11 && hoursOfSms <= 12) { 122 time = $r('app.string.preNoon', hoursOfSms + '', minutesOfSmsStr); 123 } 124 return time; 125 }, 126 127 afterTimeTwelveHourSystem(hoursOfSms, minutesOfSmsStr, hoursOfSmsStr) { 128 let time: Resource = null; 129 if (hoursOfSms > 12 && hoursOfSms < 13) { 130 time = $r('app.string.postNoon', hoursOfSms + '', minutesOfSmsStr); 131 } 132 if (hoursOfSms >= 13 && hoursOfSms < 17) { 133 time = $r('app.string.afternoon', (hoursOfSms - 12) + '', minutesOfSmsStr); 134 } 135 if (hoursOfSms >= 17 && hoursOfSms < 19) { 136 time = $r('app.string.towardEvening', (hoursOfSms - 12) + '', minutesOfSmsStr); 137 } 138 if (hoursOfSms >= 19 && hoursOfSms < 23) { 139 time = $r('app.string.evening', (hoursOfSms - 12) + '', minutesOfSmsStr); 140 } 141 if (hoursOfSms >= 23) { 142 time = $r('app.string.preMidnight', (hoursOfSms - 12) + '', minutesOfSmsStr); 143 } 144 return time; 145 }, 146 147 /** 148 * Converting Time 149 * @param messageItem 150 * @param is24HourTime 151 * @param that 152 * @return 153 */ 154 convertTimeStampToDateWeek(messageItem, is24HourTime) { 155 let now = new Date(); 156 let yearOfNow = now.getFullYear(); 157 let monthOfNow = now.getMonth() + 1; 158 let dayOfNow = now.getDate(); 159 let timeMillisecond = messageItem.timeMillisecond; 160 this.convertTimeStampToDate(messageItem, timeMillisecond, yearOfNow, monthOfNow, dayOfNow); 161 }, 162 163 /** 164 * Converts the timestamp form to the date form. 165 */ 166 convertTimeStampToDate(messageItem, timeStampFromDb, yearOfNow, monthOfNow, dayOfNow) { 167 let date: Resource = null; 168 let sms = new Date(timeStampFromDb); 169 let yearOfSms = sms.getFullYear(); 170 let monthOfSms = sms.getMonth() + 1; 171 let dayOfSms = sms.getDate(); 172 let weekOfSms = sms.getDay(); 173 if (yearOfNow == yearOfSms && monthOfNow == monthOfSms && dayOfNow == dayOfSms) { 174 date = $r('app.string.recentDateToday', ''); 175 } else if (yearOfNow == yearOfSms && monthOfNow == monthOfSms && dayOfNow - dayOfSms == 1) { 176 date = $r('app.string.recentDateYesterday', ''); 177 } else if (yearOfNow == yearOfSms) { 178 date = $r('app.string.monthDayDate', monthOfSms, dayOfSms, ''); 179 } else { 180 date = $r('app.string.yearMonthDayDate', yearOfSms, monthOfSms, dayOfSms, ''); 181 } 182 messageItem.date = date; 183 messageItem.week = this.getWeek(weekOfSms); 184 }, 185 186 /** 187 * Get Week/Day of the Week 188 * @param day 189 * @param that 190 * @return 191 */ 192 getWeek(day) { 193 let week: Resource = null; 194 switch (day) { 195 case 0: 196 week = $r('app.string.Sunday'); 197 break; 198 case 1: 199 week = $r('app.string.Monday'); 200 break; 201 case 2: 202 week = $r('app.string.Tuesday'); 203 break; 204 case 3: 205 week = $r('app.string.Wednesday'); 206 break; 207 case 4: 208 week = $r('app.string.Thursday'); 209 break; 210 case 5: 211 week = $r('app.string.Friday'); 212 break; 213 case 6: 214 week = $r('app.string.Saturday'); 215 break; 216 217 } 218 return week; 219 }, 220 221 convertTimeStampDate(timeStampFromDb) { 222 let date: Resource = null; 223 let sms = new Date(Number(timeStampFromDb)); 224 let yearOfSms = sms.getFullYear(); 225 let monthOfSms = sms.getMonth() + 1; 226 let dayOfSms = sms.getDate(); 227 let weekOfSms = sms.getDay(); 228 date = $r('app.string.yearMonthDayDate', yearOfSms, monthOfSms, dayOfSms, ''); 229 return date; 230 }, 231 232 /** 233 * 234 * @param timeStampFromDb 235 * @param is24HourTime 236 * @param that 237 * @return 238 */ 239 convertTimeStampTime(timeStampFromDb, is24HourTime) { 240 let sms = new Date(Number(timeStampFromDb)); 241 let hoursOfSms = sms.getHours(); 242 let minutesOfSms = sms.getMinutes(); 243 let hoursOfSmsStr: string = hoursOfSms + ''; 244 let minutesOfSmsStr: string = minutesOfSms + ''; 245 if (hoursOfSms < 10) { 246 hoursOfSmsStr = '0' + hoursOfSms; 247 } 248 if (minutesOfSms < 10) { 249 minutesOfSmsStr = '0' + minutesOfSms; 250 } 251 if (is24HourTime) { 252 // 24-hour clock 253 return $r('app.string.hourAndMinute', hoursOfSmsStr, minutesOfSmsStr); 254 } 255 return this.timeTwelveHourSystem(hoursOfSms, minutesOfSmsStr, hoursOfSmsStr); 256 }, 257 258 fullDate(item) { 259 let timeOfSms: Resource = null; 260 let fullDate: Resource = null; 261 let sms = new Date(item.timeMillisecond); 262 let yearOfSms = sms.getFullYear(); 263 let monthOfSms = sms.getMonth() + 1; 264 let dayOfSms = sms.getDate(); 265 let hoursOfSms = sms.getHours(); 266 let minutesOfSms = sms.getMinutes(); 267 let hoursOfSmsStr: string = hoursOfSms + ''; 268 let minutesOfSmsStr: string = minutesOfSms + ''; 269 if (hoursOfSms > 12) { 270 hoursOfSmsStr = '' + (hoursOfSms - 12); 271 } 272 if (minutesOfSms < 10) { 273 minutesOfSmsStr = '0' + minutesOfSms; 274 } 275 if (hoursOfSms < 12) { 276 timeOfSms = $r('app.string.forenoon', hoursOfSmsStr, minutesOfSmsStr); 277 } else { 278 timeOfSms = $r('app.string.afternoon', hoursOfSmsStr, minutesOfSmsStr); 279 } 280 fullDate = $r('app.string.yearMonthDayDate', yearOfSms, monthOfSms, dayOfSms, ''); 281 item.fullDate = fullDate; 282 item.timeOfSms = timeOfSms; 283 } 284}