mirror of
https://github.com/DIYgod/RSSHub.git
synced 2025-12-04 19:59:54 +08:00
chore(utils): parse-date supports relative time & fix routes (#7530)
This commit is contained in:
@@ -21,11 +21,19 @@
|
|||||||
具体解析参数请参考dayjs github说明
|
具体解析参数请参考dayjs github说明
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const parseDate = require('@/utils/parse-date');
|
const { parseDate } = require('@/utils/parse-date');
|
||||||
|
|
||||||
const pubDate = parseDate('2020/12/30', 'YYYY/MM/DD')
|
const pubDate = parseDate('2020/12/30', 'YYYY/MM/DD');
|
||||||
```
|
```
|
||||||
|
|
||||||
|
如果你需要解析相对日期,请使用 `parseRelativeDate`。
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const { parseRelativeDate } = require('@/utils/parse-date');
|
||||||
|
|
||||||
|
const pubDate = parseRelativeDate('2天前');
|
||||||
|
const pubDate = parseRelativeDate('前天 15:36');
|
||||||
|
```
|
||||||
|
|
||||||
### Timezone
|
### Timezone
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
const got = require('@/utils/got');
|
const got = require('@/utils/got');
|
||||||
const cheerio = require('cheerio');
|
const cheerio = require('cheerio');
|
||||||
const parseDate = require('@/utils/parse-date');
|
const { parseDate } = require('@/utils/parse-date');
|
||||||
|
|
||||||
module.exports = async (ctx) => {
|
module.exports = async (ctx) => {
|
||||||
const response = await got({
|
const response = await got({
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const parseDate = require('@/utils/parse-date');
|
const { parseDate } = require('@/utils/parse-date');
|
||||||
const got = require('@/utils/got');
|
const got = require('@/utils/got');
|
||||||
const cheerio = require('cheerio');
|
const cheerio = require('cheerio');
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
const got = require('@/utils/got');
|
const got = require('@/utils/got');
|
||||||
const cheerio = require('cheerio');
|
const cheerio = require('cheerio');
|
||||||
const iconv = require('iconv-lite');
|
const iconv = require('iconv-lite');
|
||||||
const parseDate = require('@/utils/parse-date');
|
const { parseDate } = require('@/utils/parse-date');
|
||||||
|
|
||||||
module.exports = async (ctx) => {
|
module.exports = async (ctx) => {
|
||||||
const { bo_table } = ctx.params;
|
const { bo_table } = ctx.params;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ const url = require('url');
|
|||||||
const got = require('@/utils/got');
|
const got = require('@/utils/got');
|
||||||
const cheerio = require('cheerio');
|
const cheerio = require('cheerio');
|
||||||
const timezone = require('@/utils/timezone');
|
const timezone = require('@/utils/timezone');
|
||||||
const parseDate = require('@/utils/parse-date');
|
const { parseDate } = require('@/utils/parse-date');
|
||||||
const rootUrl = 'http://eea.gd.gov.cn/';
|
const rootUrl = 'http://eea.gd.gov.cn/';
|
||||||
|
|
||||||
const config = {
|
const config = {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
const got = require('@/utils/got');
|
const got = require('@/utils/got');
|
||||||
const util = require('./utils');
|
const util = require('./utils');
|
||||||
const timezone = require('@/utils/timezone');
|
const timezone = require('@/utils/timezone');
|
||||||
const parseDate = require('@/utils/parse-date');
|
const { parseDate } = require('@/utils/parse-date');
|
||||||
|
|
||||||
module.exports = async (ctx) => {
|
module.exports = async (ctx) => {
|
||||||
const tag_id = ctx.params.tag;
|
const tag_id = ctx.params.tag;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
const got = require('@/utils/got');
|
const got = require('@/utils/got');
|
||||||
const cheerio = require('cheerio');
|
const cheerio = require('cheerio');
|
||||||
const parseDate = require('@/utils/parse-date');
|
const { parseDate } = require('@/utils/parse-date');
|
||||||
const timezone = require('@/utils/timezone');
|
const timezone = require('@/utils/timezone');
|
||||||
|
|
||||||
module.exports = async (ctx) => {
|
module.exports = async (ctx) => {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
const got = require('@/utils/got');
|
const got = require('@/utils/got');
|
||||||
const cheerio = require('cheerio');
|
const cheerio = require('cheerio');
|
||||||
const parseDate = require('@/utils/parse-date');
|
const { parseDate } = require('@/utils/parse-date');
|
||||||
const timezone = require('@/utils/timezone');
|
const timezone = require('@/utils/timezone');
|
||||||
|
|
||||||
module.exports = async (ctx) => {
|
module.exports = async (ctx) => {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
const got = require('@/utils/got');
|
const got = require('@/utils/got');
|
||||||
const cheerio = require('cheerio');
|
const cheerio = require('cheerio');
|
||||||
const timezone = require('@/utils/timezone');
|
const timezone = require('@/utils/timezone');
|
||||||
const parseDate = require('@/utils/parse-date');
|
const { parseDate } = require('@/utils/parse-date');
|
||||||
module.exports = async (ctx) => {
|
module.exports = async (ctx) => {
|
||||||
const name = ctx.params.name;
|
const name = ctx.params.name;
|
||||||
const sort = ctx.params.sort || '0';
|
const sort = ctx.params.sort || '0';
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
const got = require('@/utils/got');
|
const got = require('@/utils/got');
|
||||||
const cheerio = require('cheerio');
|
const cheerio = require('cheerio');
|
||||||
const parseDate = require('@/utils/parse-date');
|
const { parseDate } = require('@/utils/parse-date');
|
||||||
const timezone = require('@/utils/timezone');
|
const timezone = require('@/utils/timezone');
|
||||||
|
|
||||||
module.exports = async (ctx) => {
|
module.exports = async (ctx) => {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
const got = require('@/utils/got');
|
const got = require('@/utils/got');
|
||||||
const cheerio = require('cheerio');
|
const cheerio = require('cheerio');
|
||||||
const date_util = require('@/utils/date');
|
const { parseRelativeDate } = require('@/utils/parse-date');
|
||||||
|
const timezone = require('@/utils/timezone');
|
||||||
|
|
||||||
module.exports = async (ctx) => {
|
module.exports = async (ctx) => {
|
||||||
const link = `http://www.myzaker.com/?pos=selected_article`;
|
const link = `http://www.myzaker.com/?pos=selected_article`;
|
||||||
@@ -48,7 +49,7 @@ module.exports = async (ctx) => {
|
|||||||
title: title,
|
title: title,
|
||||||
link: itemUrl,
|
link: itemUrl,
|
||||||
description: description,
|
description: description,
|
||||||
pubDate: date_util(date, 8),
|
pubDate: timezone(parseRelativeDate(date), +8),
|
||||||
};
|
};
|
||||||
ctx.cache.set(itemUrl, JSON.stringify(single));
|
ctx.cache.set(itemUrl, JSON.stringify(single));
|
||||||
return Promise.resolve(single);
|
return Promise.resolve(single);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
const got = require('@/utils/got');
|
const got = require('@/utils/got');
|
||||||
const cheerio = require('cheerio');
|
const cheerio = require('cheerio');
|
||||||
const date_util = require('@/utils/date');
|
const { parseRelativeDate } = require('@/utils/parse-date');
|
||||||
|
const timezone = require('@/utils/timezone');
|
||||||
|
|
||||||
module.exports = async (ctx) => {
|
module.exports = async (ctx) => {
|
||||||
const type = ctx.params.type || 'source';
|
const type = ctx.params.type || 'source';
|
||||||
@@ -50,7 +51,7 @@ module.exports = async (ctx) => {
|
|||||||
title: title,
|
title: title,
|
||||||
link: itemUrl,
|
link: itemUrl,
|
||||||
description: description,
|
description: description,
|
||||||
pubDate: date_util(date, 8),
|
pubDate: timezone(parseRelativeDate(date), +8),
|
||||||
};
|
};
|
||||||
ctx.cache.set(itemUrl, JSON.stringify(single));
|
ctx.cache.set(itemUrl, JSON.stringify(single));
|
||||||
return Promise.resolve(single);
|
return Promise.resolve(single);
|
||||||
|
|||||||
@@ -1,4 +1,42 @@
|
|||||||
const dayjs = require('dayjs');
|
const dayjs = require('dayjs');
|
||||||
dayjs.extend(require('dayjs/plugin/customParseFormat'));
|
dayjs.extend(require('dayjs/plugin/customParseFormat'));
|
||||||
|
|
||||||
module.exports = (date, ...options) => dayjs(date, ...options).toDate();
|
const patterns = [
|
||||||
|
{
|
||||||
|
regexp: /^(\d+)分钟前$/,
|
||||||
|
handler: (minute) => dayjs().subtract(minute, 'minutes'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
regexp: /^(\d+)小时前$/,
|
||||||
|
handler: (hour) => dayjs().subtract(hour, 'hours'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
regexp: /^(\d+)天前$/,
|
||||||
|
handler: (day) => dayjs().subtract(day, 'days'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
regexp: /^今天\s*((\d+:\d+)?)$/,
|
||||||
|
handler: (hm) => dayjs(hm || '0:0', ['HH:m', 'HH:mm', 'H:m', 'H:mm']),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
regexp: /^昨天\s*((\d+:\d+)?)$/,
|
||||||
|
handler: (hm) => dayjs(hm || '0:0', ['HH:m', 'HH:mm', 'H:m', 'H:mm']).subtract(1, 'day'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
regexp: /^前天\s*((\d+:\d+)?)$/,
|
||||||
|
handler: (hm) => dayjs(hm || '0:0', ['HH:m', 'HH:mm', 'H:m', 'H:mm']).subtract(2, 'day'),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
parseDate: (date, ...options) => dayjs(date, ...options).toDate(),
|
||||||
|
parseRelativeDate: (date) => {
|
||||||
|
for (const pattern of patterns) {
|
||||||
|
const match = pattern.regexp.exec(date);
|
||||||
|
if (match !== null) {
|
||||||
|
return pattern.handler(match[1]).toDate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user