【问题标题】:Parse date with unicode token format string with wildcard separator characters使用带有通配符分隔符的 unicode 令牌格式字符串解析日期
【发布时间】:2019-04-12 23:21:41
【问题描述】:

我正在使用date-fns 2 (alpha) 将日期字符串解析为 JavaScript 日期。这个版本的库使用unicode tokens 来格式化/解析字符串。

我希望能够在不特别关心分隔符的情况下解析日期字符串。

例如假设我想解析以下日期:“18/11/2018”。我可以使用dd/MM/yyyy 格式。效果很好:

> dateFns.parse('18/11/2018', 'dd/MM/yyyy', new Date());
2018-11-18T00:00:00.000Z

但假设我想解析格式为“18 11 2018”的日期,原始格式字符串将失败:

> dateFns.parse('18 11 2018', 'dd/MM/yyyy', new Date());
Invalid Date

鉴于分隔符对日期本身的值没有影响,有没有办法构造一个基本上忽略它的格式字符串?

【问题讨论】:

  • 您可以在输入中使用正则表达式将它们替换为/,例如。 -> "18 11 2018".replace(/(\d*).(\d*).(\d*)/, "$1/$2/$3")

标签: javascript date parsing date-fns


【解决方案1】:

如果您尝试将带有各种分隔符的 dd mm yyyy 格式的日期字符串转换为 js 日期对象(UTC 格式),您可以使用正则表达式解析字符串,然后使用 new Date(Date.UTC(...))。例如:

const convertDate = (dstring) => {
  const [d, m, y] = dstring.match(/\d+/g);
  return new Date(Date.UTC(y, m - 1, d));
};

// the below demonstrates output for a variety of date string separators
const dstrings = ['18/11/2018', '18 11 2018', '18-11-2018', '18.11.2018'];
for (const dstring of dstrings) {
  const date = convertDate(dstring);
  console.log(JSON.stringify(date));
}

【讨论】:

  • 这是解决“通配符”案件的唯一方法吗?没有比“更好”的东西吗?表示单个要跳过的字符或“?{1-4}”在 1 到 4 个位置之间跳过?
  • @zaggi - 有很多乱七八糟的方法来解析这样的字符串,其中大多数取决于您对输入字符串的了解(前导/尾随字符和空格、分隔符类型、分隔符长度等)。根据您对输入字符串的了解定制您的特定方法是处理此问题的一种方法。在可能的情况下,更好的方法是修复输入数据,这样您就可以完全避免解析。
猜你喜欢
  • 2016-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多