当我使用Apify抓取网站时,我需要一些JavaScript将08 Oct - 12 Oct 2019
这样显示的两个日期分隔为单独的值10/08/2019
和10/12/2019
。
我已经开始使用Apify从本地剧院网站上抓取一些活动数据,因此我可以自己提供相同的信息。剧院公司将开始日期和结束日期写在一个段落标签中,这意味着它将在一个单元格中返回两个日期。
为了让我的网站使用剧院公司的日期数据,我需要将每个日期的格式设置为mm/dd/yyyy
,并且需要将每个日期都分成各自的值。 javascript是否可以将提供的示例中的日期分开并将其格式化为美国日期格式?
作为示例,这是我要从https://theatreroyal.com/whats-on/the-rocky-horror-show/抓取数据的页面之一
async function pageFunction(context) {
const { request, log, jQuery } = context;
const $ = jQuery;
const title = $('title').text();
log.info(`URL: ${request.url} TITLE: ${title}`);
return {
url: request.url,
name: $('.c-pg-masthead-wrapper--events-fixed .c-pg-title').text(),
date: $('.c-pg-masthead-wrapper--events-fixed .c-pg-subtitle').text().trim()
};
}
当前,以上脚本返回了所写的日期,即10 October - 12 Oct 2019
,无法满足我的需要。
我非常感谢您的帮助。预先感谢!
答案 0 :(得分:0)
这是一个将往返于
的函数我用过
const format = { month: '2-digit', day: '2-digit', year: 'numeric' };
const getDates = (dateStr) => {
[_, fd, fm, td, tm, year] = dateStr.match(/(\d{2}) ([a-zA-Z]{3}) - (\d{2}) ([a-zA-Z]{3}) (\d{4})/);
const from = new Date(`${fd} ${fm} ${year} 15:00:00`); // using 15:00 for dst reasons
const to = new Date(`${td} ${tm} ${year} 15:00:00`);
return {
"from": from.toLocaleDateString("en-US", format),
"to": to.toLocaleDateString("en-US", format)
}
};
const date = '08 Oct - 12 Oct 2019'; // change to your date string
const dates = getDates(date); // how to call it
console.log(dates.from, dates.to); // how to use the dates returned
这是一个可以处理跨年字符串的版本
const format = { month: '2-digit', day: '2-digit', year: 'numeric' };
const getDates = (dateStr) => {
const sameYear = dateStr.split(" ").length === 6; // dd mmm - dd mmm yyyy
let fy="";
if (sameYear) {
[_, fd, fm, td, tm, year] = dateStr.match(/(\d{2}) ([a-zA-Z]{3}) - (\d{2}) ([a-zA-Z]{3}) (\d{4})/);
}
else {
[_, fd, fm, fy, td, tm, year] = dateStr.match(/(\d{2}) ([a-zA-Z]{3}) (\d{4}) - (\d{2}) ([a-zA-Z]{3}) (\d{4})/);
}
const from = new Date(`${fd} ${fm} ${fy?fy:year} 15:00:00`); // using 15:00 for dst reasons
const to = new Date(`${td} ${tm} ${year} 15:00:00`);
return {
"from": from.toLocaleDateString("en-US", format),
"to": to.toLocaleDateString("en-US", format)
}
};
const date1 = '08 Oct - 12 Oct 2019'; // change to your date string
const dates1 = getDates(date1); // how to call it
console.log(dates1.from, dates1.to); // how to use the dates returned
const date2 = '08 Dec 2019 - 12 Jan 2020'; // change to your date string
const dates2 = getDates(date2); // how to call it
console.log(dates2.from, dates2.to); // how to use the dates returned