diff --git a/lib/routes/blogs/diygod/animal-crossing.js b/lib/routes/blogs/diygod/animal-crossing.js index 9cb773f7b4..68b48f54dc 100644 --- a/lib/routes/blogs/diygod/animal-crossing.js +++ b/lib/routes/blogs/diygod/animal-crossing.js @@ -1,6 +1,6 @@ const got = require('@/utils/got'); const cheerio = require('cheerio'); -const date = require('@/utils/date'); +const parseDate = require('@/utils/parse-date'); module.exports = async (ctx) => { const response = await got({ @@ -30,7 +30,7 @@ module.exports = async (ctx) => { title: item.text(), description, link: `https://diygod.me/animal-crossing/#${item.attr('id')}`, - pubDate: date(item.text().split(' ')[1]), + pubDate: parseDate(item.text().split(' ')[1], 'M月D日'), guid: item.text().split(' ')[0], }; }) diff --git a/lib/routes/blogs/wangyin.js b/lib/routes/blogs/wangyin.js index fb8ac54b05..f6a41bc582 100644 --- a/lib/routes/blogs/wangyin.js +++ b/lib/routes/blogs/wangyin.js @@ -1,4 +1,4 @@ -const date = require('@/utils/date'); +const parseDate = require('@/utils/parse-date'); const got = require('@/utils/got'); const cheerio = require('cheerio'); @@ -12,14 +12,14 @@ module.exports = async (ctx) => { const element = $(e); const title = element.find('a').text(); const link = url + element.find('a').attr('href'); - const dateraw = /(\d+)\/(\d+)\/(\d+)/.exec(link); + const dateraw = /\d{4}\/\d{2}\/\d{2}/.exec(link)[0]; return { title: title, description: '', link: link, author: '王垠', - pubDate: date(`${dateraw[1]}-${dateraw[2]}-${dateraw[3]}`), + pubDate: parseDate(dateraw, 'YYYY/MM/DD'), }; }) .get(); diff --git a/lib/routes/etoland/board.js b/lib/routes/etoland/board.js index e9d522427a..e5c5ec3473 100644 --- a/lib/routes/etoland/board.js +++ b/lib/routes/etoland/board.js @@ -1,7 +1,7 @@ const got = require('@/utils/got'); const cheerio = require('cheerio'); const iconv = require('iconv-lite'); -const date = require('@/utils/date'); +const parseDate = require('@/utils/parse-date'); module.exports = async (ctx) => { const { bo_table } = ctx.params; @@ -38,7 +38,7 @@ module.exports = async (ctx) => { title: title, description: description, link: link, - pubDate: date(item.find('td.mw_basic_list_datetime').text()), + pubDate: parseDate(item.find('td.mw_basic_list_datetime').text(), 'HH:mm'), }; }) .get(), diff --git a/lib/routes/weibo/super_index.js b/lib/routes/weibo/super_index.js index 2cb96fec75..d6ffb98bda 100644 --- a/lib/routes/weibo/super_index.js +++ b/lib/routes/weibo/super_index.js @@ -1,6 +1,6 @@ const got = require('@/utils/got'); const weiboUtils = require('./utils'); -const date = require('@/utils/date'); +const timezone = require('@/utils/timezone'); const queryString = require('query-string'); module.exports = async (ctx) => { @@ -37,7 +37,7 @@ module.exports = async (ctx) => { description: desc, author: mblog.user.screen_name, link: `https://weibo.com/${mblog.user.id}/${mblog.bid}`, - pubDate: date(mblog.created_at, 8), + pubDate: timezone(mblog.created_at, +8), }); } } diff --git a/lib/utils/parse-date.js b/lib/utils/parse-date.js new file mode 100644 index 0000000000..fed6ce625b --- /dev/null +++ b/lib/utils/parse-date.js @@ -0,0 +1,4 @@ +const dayjs = require("dayjs"); +dayjs.extend(require('dayjs/plugin/customParseFormat')); + +module.exports = (date, ...options) => dayjs(date, ...options).toDate(); diff --git a/lib/utils/timezone.js b/lib/utils/timezone.js new file mode 100644 index 0000000000..083a3c7bfe --- /dev/null +++ b/lib/utils/timezone.js @@ -0,0 +1,14 @@ +const assert = require("assert").strict; + +const millisInAnHour = 60 * 60 * 1000; +const serverTimezone = -new Date().getTimezoneOffset() / 60; + +module.exports = (date, timezone = serverTimezone) => { + if (typeof (date) === "string" || date instanceof String) { + date = new Date(date); + } + + assert(date instanceof Date); + + return new Date(date.getTime() - millisInAnHour * (timezone - serverTimezone)); +};