我需要将两个日期拆分为单独的值

时间:2019-10-08 09:11:40

标签: javascript apify

当我使用Apify抓取网站时,我需要一些JavaScript将08 Oct - 12 Oct 2019这样显示的两个日期分隔为单独的值10/08/201910/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,无法满足我的需要。

我非常感谢您的帮助。预先感谢!

1 个答案:

答案 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