提问者:小点点

在JavaScript中将不带连字符或空格的日期转换为日期


对于学校,我需要用RDW API做一个应用程序。 (RDW是注册所有汽车的荷兰政府实例)。

我得到的部分回复是这样的:

[
        "vervaldatum_apk": "20210402",
        "datum_tenaamstelling": "20100318",
]

这些数字是没有连字符或空格的日期。 如何将它们转换为JavaScript日期? 我试过使用Moment.js模块,但它似乎对我不起作用。


共3个答案

匿名用户

您可以映射对象的条目,从每个条目中获取值v,并使用正则表达式将其格式化为日期字符串的形式。 这里使用的表达式是:

/(\d+)(\d{2})(\d{2})/g

这将取你号码的前n-4位数字,并将其分组到第1组。 稍后在替换中使用$1引用该组。 然后,它将取下两个表示月份的数字,并将它们分组到组#2(使用$2引用)。 最后,它将取剩下的两位数并将其分组到组#3中。 然后可以替换匹配的组件,使它们在每个组之间包含一个-。 然后可以将其包装在new Date()构造函数中,以获取JavaScript Date对象。 映射完entires数组中的所有条目后,可以使用object.fromentries():

null

const obj = {"vervaldatum_apk": "20210402", "datum_tenaamstelling": "20100318"};
const res = Object.fromEntries(
  Object.entries(obj).map(([k, v]) => [k, new Date(v.replace(/(\d+)(\d{2})(\d{2})/g, '$1-$2-$3'))])
);
console.log(res);

匿名用户

您可以通过使用正则表达式来匹配每个日期组,然后使用模板字符串重新创建日期来实现这一点。

const getDate = (date) => {
    const {year, month, day} = date.match(/(?<year>\d{4})(?<month>\d{2})(?<day>\d{2})/, 'ig').groups;

    return new Date(`${year}.${month}.${day}`);
}

上面的regex字符串使用命名的捕获组,从匹配操作返回的对象将包含一个包含年,月和日的组对象

然后使用模板字符串在下面创建.分隔日期。

匿名用户

(我认为@EinaróLafsson已经提供了一个更清晰或更简短的版本)@puk,我不确定我是否足够理解这个问题,但假设这是Javascript对象,特别是“20210402”“20100318”,我会做如下操作:

//starting with 
    [
        "vervaldatum_apk":"20210402",
        "datum_tenaamstelling":"20100318"
    ]
    // convert to date
   const vervaldatum = new Date(parseInt("20210402"))
   const datum = new Date(parseInt("20100318"))

    // Format each of them
    // Germany uses day-month-year format

    // formatting vervaldatum_apk
  const formatted_vervaldatum_apk  = `${vervaldatum.getDay()}-${vervaldatum.getMonth()}-${vervaldatum.getDay()}-${vervaldatum.getFullYear()}, ${vervaldatum.getHours()}:${vervaldatum.getMinutes()}:${vervaldatum.getSeconds()}`

    // formatting datum_tenaamstelling
  const formatted_datum_tenaamstelling = `${datum.getDay()}-${datum.getMonth()}-${datum.getFullYear()}, ${datum.getHours()}:${datum.getMinutes()}:${datum.getSeconds()}`

    // Formatted  object
  const formattedDateObject = {
    vervaldatum_apk: formatted_vervaldatum_apk ,
    datum_tenaamstelling: formatted_datum_tenaamstelling
  }

  /// this is the object 
  formattedDateObject = {
    datum_tenaamstelling: "3-11-1969, 22:35:0",
    vervaldatum_apk: "3-11-3-1969, 22:36:50"
  }
  // Formatted array
     // So from 
     [
        "vervaldatum_apk":"20210402",
        "datum_tenaamstelling":"20100318"
    ]
    // you end up with (hour, minutes, and seconds added)
  [
      "vervaldatum_apk":"3-11-3-1969, 22:36:50",
      "datum_tenaamstelling":"3-11-1969, 22:35:0"
  ]