【发布时间】:2021-03-18 15:58:44
【问题描述】:
我有一个可能是字符串化日期或数字的值。我想以不同的方式处理每种情况。
日期值可以是任何可以被日期库解析的有效日期字符串,比如 dayjs。例如:"10/10/2020"、"10-20-2020"...
数字值可以是实际数字,也可以是字符串形式的数字,所以像5、"5.3"、"10"这样的值...
例如->
const number = parseFloat(value);
if (!isNaN(number)) {
return NumberValueConverter.prototype.toView(number);
}
const date = dayjs(value);
if (date.isValid()) {
return DateValueConverter.prototype.toView(value);
}
此代码不起作用 - 因为日期字符串(例如 10-10-2020、10-10-2020)最终会被解析为 10
如果我反过来做,dayjs 会将 10 之类的数字转换为有效日期。
【问题讨论】:
-
不要使用
parseFloat,只使用isNaN(value)。它将返回转换是否产生有效数字。isNaN("10-10-2020")是true -
考虑到所有日期格式,这不一定是可能的。例如,
20210318是 ISO 8601 基本格式的有效日期表示。它也是一个有效的数字。 (2021-03-18是 ISO 8601 扩展 日期格式。) -
@MattJohnson-Pint 这很公平。我预计不会 100% 成功——这些是存储在 JSON 中的用户输入值——我主要是在寻找一种尽力而为的方法,该方法将返回一个相当有用的结果以在大部分时间显示给最终用户。
标签: javascript date parsing duck-typing