2 回答

TA贡献1797条经验 获得超4个赞
使用+operator、Number函数或 lodash_.toNumber()将返回NaN带有混合数字的字符串:
console.log(+'2019-06-12T06:20:39.465Z')
console.log(+'20000')
所以逻辑是:
const parseParam = value => {
let v = +value
if (!isNaN(v)) return v
v = Date.parse(value)
if (!isNaN(v)) return v
if (value === 'true' || value === 'false') return value === 'true'
return value
}
console.log(parseParam('2019-06-12T06:20:39.465Z'))
console.log(parseParam('20000'))
console.log(parseParam('false'))
console.log(parseParam('cats'))

TA贡献1853条经验 获得超18个赞
ISO 可能会省略秒或时区或毫秒,但如果您忽略这些并检查其他所有内容,您可以可靠地检查不同的 ISO 格式。
console.log(isISO('2019-06-12T06:20:39.234Z'))
console.log(isISO('2019-06-12T06:20:39'))
console.log(isISO('2019-06-12T06:20'))
console.log(isISO("2019-1-1"))
console.log(isISO('2019-06-12T06:20:39+05'))
console.log(isISO('ketchup'))
function isISO(str) {
try {
str = str.split('+')[0];
var iso = new Date(str).toISOString();
var [date, time] = iso.split('T');
var [y, m, d] = date.split('-');
return iso.indexOf(`${y}-${m}-${d}`) === 0;
} catch (e) {
return false;
}
}
添加回答
举报