fix(route): 修复观察者网风闻社区出现 Invalid Date 的错误 (#7458)
This commit is contained in:
parent
e4ad73ece5
commit
27240d9bfd
|
|
@ -13,14 +13,48 @@ module.exports = async (ctx) => {
|
|||
});
|
||||
const list = response.data.data.items;
|
||||
const user_nick = list[0].user_nick;
|
||||
|
||||
/** Get time from relative time in HTML */
|
||||
function getpass_at(e) {
|
||||
// 修复数据返回缺少年份 但是 几个小时前的就不想写了 = =
|
||||
if (e.length === 11) {
|
||||
const now = new Date();
|
||||
const minuteRelativeTime = /(\d+)\s*分钟前/;
|
||||
const hourRelativeTime = /(\d+)\s*小时前/;
|
||||
const yesterdayRelativeTime = /昨天\s*(\d+):(\d+)/;
|
||||
const shortDate = /(\d+)-(\d+)\s*(\d+):(\d+)/;
|
||||
|
||||
// offset to ADD for transforming China time to UTC
|
||||
const chinaToUtcOffset = -8 * 3600 * 1000;
|
||||
// offset to ADD for transforming local time to UTC
|
||||
const localToUtcOffset = new Date().getTimezoneOffset() * 60 * 1000;
|
||||
// offset to ADD for transforming local time to china time
|
||||
const localToChinaOffset = localToUtcOffset - chinaToUtcOffset;
|
||||
|
||||
let time;
|
||||
if (e === '刚刚') {
|
||||
time = new Date();
|
||||
} else if (minuteRelativeTime.test(e)) {
|
||||
const rel = minuteRelativeTime.exec(e);
|
||||
time = new Date(Date.now() - parseInt(rel[1]) * 60 * 1000);
|
||||
} else if (hourRelativeTime.test(e)) {
|
||||
const rel = hourRelativeTime.exec(e);
|
||||
time = new Date(Date.now() - parseInt(rel[1]) * 60 * 60 * 1000);
|
||||
} else if (yesterdayRelativeTime.test(e)) {
|
||||
const rel = yesterdayRelativeTime.exec(e);
|
||||
// this time is China time data in local timezone
|
||||
time = new Date(Date.now() - 86400 * 1000 + localToChinaOffset);
|
||||
time.setHours(parseInt(rel[1]), parseInt(rel[2]), 0, 0);
|
||||
// transform back to china timezone
|
||||
time = new Date(time.getTime() - localToChinaOffset);
|
||||
} else if (shortDate.test(e)) {
|
||||
const rel = shortDate.exec(e);
|
||||
const now = new Date(Date.now() + localToChinaOffset);
|
||||
const year = now.getFullYear();
|
||||
e = year + '-' + e;
|
||||
// this time is China time data in local timezone
|
||||
time = new Date(year, parseInt(rel[1]) - 1, parseInt(rel[2]), parseInt(rel[3]), parseInt(rel[4]));
|
||||
// transform back to china timezone
|
||||
time = new Date(time.getTime() - localToChinaOffset);
|
||||
} else {
|
||||
time = new Date(e);
|
||||
}
|
||||
const time = new Date(e).toLocaleString();
|
||||
return time;
|
||||
}
|
||||
ctx.state.data = {
|
||||
|
|
|
|||
Loading…
Reference in New Issue