首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JavaScript中转换没有连字符或空格的日期

在JavaScript中转换没有连字符或空格的日期
EN

Stack Overflow用户
提问于 2020-06-08 12:24:48
回答 3查看 912关注 0票数 0

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

我得到的部分回复如下:

代码语言:javascript
复制
[
        "vervaldatum_apk": "20210402",
        "datum_tenaamstelling": "20100318",
]

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-08 12:40:05

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

代码语言:javascript
复制
/(\d+)(\d{2})(\d{2})/g

这将获取数字的第一个n-4位数,并将其分组为#1。该组稍后将使用$1在替换中引用。然后,它将取下代表月份的2位数字,并将其分组为#2组(使用$2引用)。最后,它将接受剩下的两位数,并将其分组为#3,然后您可以替换匹配的组件,使它们在每个组之间包含一个-。然后,可以将其包装到new Date()构造函数中,以获取JavaScript date对象。一旦映射完实体数组中的所有条目,就可以使用Object.fromEntries()将其转换回对象

代码语言:javascript
复制
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);

如果您不能支持Object.fromEntries(),您可以使用另一种方法。一种方法是将Object.assign()与扩展语法一起使用:

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

票数 3
EN

Stack Overflow用户

发布于 2020-06-08 12:41:47

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

代码语言:javascript
复制
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字符串使用命名捕获组,匹配操作返回的对象将包含包含年份、月和日的组对象。

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

票数 1
EN

Stack Overflow用户

发布于 2020-06-08 13:06:45

(我认为@Einar已经提供了一个更清晰或更短的版本) @Puk,我不确定我是否对这个问题有足够的理解,但假设这是Javascript对象,特别是"20210402""20100318",我会这样做:

代码语言:javascript
复制
//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"
  ]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62262021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档