|
247 | 247 | return `<div class="msg-bubble ${cls}" data-id="${m.id}" data-body="${escAttr(m.body)}" data-mine="${m.is_mine}" data-deleted="${m.is_deleted}"> |
248 | 248 | ${replyHtml} |
249 | 249 | <div class="msg-text${deletedCls}">${escHtml(m.body)}</div> |
250 | | - <div class="msg-meta">${escHtml(m.sent_at)} ${ticks}</div> |
| 250 | + <div class="msg-meta">${fmtTime(m.sent_at)} ${ticks}</div> |
251 | 251 | </div>`; |
252 | 252 | }).join(''); |
253 | 253 |
|
|
259 | 259 | if(!str) return ''; |
260 | 260 | return String(str).replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>'); |
261 | 261 | } |
| 262 | +function fmtTime(iso){ |
| 263 | + if(!iso) return ''; |
| 264 | + const d = new Date(iso); |
| 265 | + const now = new Date(); |
| 266 | + const diffMs = now - d; |
| 267 | + const diffMins = Math.floor(diffMs / 60000); |
| 268 | + const diffHours = Math.floor(diffMs / 3600000); |
| 269 | + const diffDays = Math.floor(diffMs / 86400000); |
| 270 | + // Leo |
| 271 | + if(diffDays === 0){ |
| 272 | + return d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); |
| 273 | + } |
| 274 | + // Jana |
| 275 | + if(diffDays === 1){ |
| 276 | + return 'Jana ' + d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); |
| 277 | + } |
| 278 | + // Wiki hii |
| 279 | + if(diffDays < 7){ |
| 280 | + const days = ['Jumapili','Jumatatu','Jumanne','Jumatano','Alhamisi','Ijumaa','Jumamosi']; |
| 281 | + return days[d.getDay()] + ' ' + d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); |
| 282 | + } |
| 283 | + // Zamani |
| 284 | + return d.toLocaleDateString('sw-TZ', {day:'numeric', month:'short', year:'numeric'}) + |
| 285 | + ', ' + d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); |
| 286 | +} |
262 | 287 | function escAttr(str){ |
263 | 288 | if(!str) return ''; |
264 | 289 | return String(str).replace(/"/g,'"').replace(/'/g,'''); |
|
0 commit comments