确定字符串是Date还是Number
Determine if string is Date or Number
我正在尝试确定字符串是数字还是日期。
这是我的代码:
this._getFieldFormat = (value) => {
// check if is date
let d = new Date(value);
if (!isNaN( d.getTime() ) ) {
return 'date';
}
// check if is boolean
// isNaN(false) = false, false is a number (0), true is a number (1)
if(typeof value === 'boolean'){
return 'boolean';
}
// check if a string is a number
if(!isNaN(value)){
return 'number';
}
return typeof value;
};
它适用于像2016-04-19T23:09:10.208092Z
这样的日期。问题是1
看起来是一个有效的日期(Wed Dec 31 1969 16:00:00 GMT-0800 (PST)
),而isNaN(new Date())
返回false
(日期是一个数字)。
你知道如何摆脱这种循环吗?
所以发生的事情被称为强制。由于javascript是动态类型,当你给它两种不同的类型时,js引擎会试图将其中一种类型强制为合理的类型或它认为你的意思。
例如:
isNan("37"); is false because "37" is converted to the number 37
isNaN(new Date())返回false(日期是数字)
它将Date转换为数字,因此这是正确的。
但是,根据浏览器和提供的值,ECMA-262定义的未识别为ISO格式的日期字符串中的无效值可能会也可能不会导致NaN
所以
new Date('23/25/2014'); // NON-ISO string with invalid date values
因此,这将在所有符合ES5及更高版本的浏览器中返回NaN。
为了进行更严格的检查,您可以使用:
Number.isNan(new Date()); // This should return true
因此,为了重述,请确保日期符合ISO标准,否则将是NaN,并使用更严格的检查。希望这能有所帮助。
一般来说,从Javascript设计的角度来看,我认为你不能通过设计来做到这一点。从8640000000000000到数字8640000000000000中最早日期之间的任何数字都可以转换为日期(表示为1970年1月1日UTC后的时间(以毫秒为单位))。
因此,任何不在此范围内下降的数字都不能是日期。任何落在范围内的数字都是有效的日期或数字,您必须使用上下文来确定是要将其解释为数字还是日期。
然而,您可以做一个简单的实现来测试数字是否是有效日期,但这是您能做的最好的事情,不需要上下文。
确定一个日期是否是一个数字可能会更容易一些。因为人类可读的日期表示将通过isNaN()
返回true
,从而确定它绝对不是数字。然后,您将继续检查该字符串是否为日期,这是您在函数中已经做过的。
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 我应该使用Ng提交还是点击表格
- 在javascript中确定输入数字是负数还是正数
- 我应该先学习Angularjs还是Laravel
- 使用模式格式化Number类型输入中的值
- 我需要NG-IF/NG-SWITCH还是NG-SHOW&NG-HIDE
- AngularJS {{ val | number:1 }} 不四舍五入到小数点后 1 位
- angular type=[number]指令来阻止粘贴
- 最好使用JavaScript还是XQuery
- javascript/angularjs 将 String 与 number for loop 连接起来
- 仅当窗口宽度>940像素,无论是通过页面加载还是调整大小
- 内容脚本是在同一个孤立的世界中运行,还是在不同的孤立世界中运行
- 如何检测我的音频流是:正在播放、暂停还是已完成
- a=1和a=new Number()之间的差异
- 使用appendChild()动态添加的脚本是按顺序执行还是并行执行
- 是重新呈现整个模板更好,还是使用jquery修改一些值更好
- 我应该总是将模块调用到var中,还是在节点中立即执行
- 是我的第三方JavaScript返回html还是只是一个空对象
- 确定字符串是Date还是Number