snappymail/dev/Common/Momentor.js

56 lines
1.4 KiB
JavaScript
Raw Normal View History

2019-07-05 03:19:24 +08:00
import { i18n } from 'Common/Translator';
2015-11-15 08:23:16 +08:00
export function timestampToString(timeStampInUTC, formatStr) {
2020-08-15 03:19:06 +08:00
const now = Date.now(),
time = 0 < timeStampInUTC ? Math.min(now, timeStampInUTC * 1000) : (0 === timeStampInUTC ? now : 0);
2015-11-15 08:23:16 +08:00
2020-08-15 03:19:06 +08:00
if (31536000000 < time) {
const m = new Date(time);
2019-07-05 03:19:24 +08:00
switch (formatStr) {
2016-06-16 07:36:44 +08:00
case 'FROMNOW':
return m.fromNow();
2020-08-15 03:19:06 +08:00
case 'SHORT': {
if (4 >= (now - time) / 3600000)
return m.fromNow();
const mt = m.getTime(), date = new Date,
dt = date.setHours(0,0,0,0);
if (mt > dt)
return i18n('MESSAGE_LIST/TODAY_AT', {TIME: m.format('LT')});
if (mt > dt - 86400000)
return i18n('MESSAGE_LIST/YESTERDAY_AT', {TIME: m.format('LT')});
2020-08-15 03:19:06 +08:00
if (date.getFullYear() === m.getFullYear())
return m.format('d M');
return m.format('LL');
2020-08-15 03:19:06 +08:00
}
2016-06-16 07:36:44 +08:00
case 'FULL':
return m.format('LLL');
2016-06-16 07:36:44 +08:00
default:
return m.format(formatStr);
2015-11-15 08:23:16 +08:00
}
}
return '';
2016-06-16 07:36:44 +08:00
}
2015-11-15 08:23:16 +08:00
export function timeToNode(element, time) {
try {
if (time) {
element.dateTime = (new Date(time * 1000)).format('Y-m-d\\TH:i:s');
2021-09-23 20:24:06 +08:00
} else {
time = Date.parse(element.dateTime) / 1000;
}
2021-09-23 20:24:06 +08:00
let key = element.dataset.momentFormat;
if (key) {
element.textContent = timestampToString(time, key);
}
2021-09-23 20:24:06 +08:00
if ((key = element.dataset.momentFormatTitle)) {
element.title = timestampToString(time, key);
2015-11-15 08:23:16 +08:00
}
} catch (e) {
// prevent knockout crashes
console.error(e);
2015-11-15 08:23:16 +08:00
}
2016-06-16 07:36:44 +08:00
}