如何验证字符串值是否是可解析的日期格式?
How to validate whether a string-value is a parsable date-format?
我是运行下面的代码,检查字符串是否是日期。我的输入值之一是 'text'
,其中 returns 是 NaN
值,但我的 if
子句没有按预期工作。
function isDate(myDate) {
console.log('myDate = ' + myDate);
return Date.parse(new Date(myDate));
}
// var date1 = '1/5/22'; // good date
var date1 = 'test'; // bad date
var whatDate = isDate(date1);
console.log('date = ' + whatDate);
if (whatDate == 'NaN') {
console.log('bad date');
} else {
console.log('good date');
}
你就快完成了:
if(whatDate == 'NaN'){
log.debug('bad date');
}else{
log.debug('good date');
}
不要将 whatDate
与 'NaN'
进行比较,而是使用函数 isNaN()
:
if(isNaN(whatDate)){
log.debug('bad date');
}else{
log.debug('good date');
}
或者,如果您真的想与 'NaN'
进行比较,您首先必须将 whatDate
转换为字符串:
if((whatDate + "") == 'NaN'){
log.debug('bad date');
}else{
log.debug('good date');
}
是一种可能。另一种方式是
if(whatDate.toString() == 'NaN'){
log.debug('bad date');
}else{
log.debug('good date');
}
在您的 if 语句中,您正在检查 whatDate 是否等于字符串“NaN”。 what 你想检查 whatDate 是否是一个数字。
你可以试试
if (isNaN(whatDate))
下面的答案,除了已经解释过的关于如何检测 NaN
值的内容之外,还想进一步深入。
一个检查或测试函数,特别是如果它的名称中还带有 前缀 is
应该始终 return 完全 布尔值值.
- 因此 OP 首先会以用户期望的方式实现这样的功能。
- 其次,OP 在测试函数的实现中只处理了一次
NaN
问题。
编辑 根据并感谢 RobG
的澄清
...和... 根据 ECMAScript 的规范 instantiating a Date
object,传递给构造函数的参数将被解析并分配给内部 thisTimeValue
插槽。后者的数字类型是不可解析(无效)参数的 NaN
值。
任何 valueOf
相关操作都会 return 内部 thisTimeValue
槽的值。
任何 toString
相关操作都会根据后一个值计算日期字符串格式。对于 NaN
的 thisTimeValue
,returned 字符串值必须是 'Invalid Date'
.
因此验证/测试实施可能类似于...
function isParsableDateRepresentative(...args) {
return String(new Date(...args)) !== 'Invalid Date';
}
...但最好它应该更接近下一个提供的...
function isParsableDateRepresentative(...args) {
return !Number.isNaN(new Date(...args).valueOf());
}
测试:
function isParsableDateRepresentative(...args) {
return !Number.isNaN(new Date(...args).valueOf());
}
console.log('new Date("1/5/22") ...', new Date("1/5/22"));
console.log(
'isParsableDateRepresentative("1/5/22") ...',
isParsableDateRepresentative("1/5/22")
);
console.log('\nnew Date("test") ...', new Date("test"));
console.log(
'isParsableDateRepresentative("test") ...',
isParsableDateRepresentative("test")
);
console.log('\nnew Date(new Date("test")) ...', new Date(new Date("test")));
console.log(
'isParsableDateRepresentative(new Date("test")) ...',
isParsableDateRepresentative(new Date("test"))
);
console.log('\nnew Date() ...', new Date());
console.log(
'isParsableDateRepresentative() ...',
isParsableDateRepresentative()
);
console.log('\nnew Date(null) ...', new Date(null));
console.log(
'isParsableDateRepresentative(null) ...',
isParsableDateRepresentative(null)
);
console.log('\nnew Date(undefined) ...', new Date(undefined));
console.log(
'isParsableDateRepresentative(undefined) ...',
isParsableDateRepresentative(undefined)
);
console.log('\nnew Date("") ...', new Date(""));
console.log(
'isParsableDateRepresentative("") ...',
isParsableDateRepresentative("")
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
我是运行下面的代码,检查字符串是否是日期。我的输入值之一是 'text'
,其中 returns 是 NaN
值,但我的 if
子句没有按预期工作。
function isDate(myDate) {
console.log('myDate = ' + myDate);
return Date.parse(new Date(myDate));
}
// var date1 = '1/5/22'; // good date
var date1 = 'test'; // bad date
var whatDate = isDate(date1);
console.log('date = ' + whatDate);
if (whatDate == 'NaN') {
console.log('bad date');
} else {
console.log('good date');
}
你就快完成了:
if(whatDate == 'NaN'){
log.debug('bad date');
}else{
log.debug('good date');
}
不要将 whatDate
与 'NaN'
进行比较,而是使用函数 isNaN()
:
if(isNaN(whatDate)){
log.debug('bad date');
}else{
log.debug('good date');
}
或者,如果您真的想与 'NaN'
进行比较,您首先必须将 whatDate
转换为字符串:
if((whatDate + "") == 'NaN'){
log.debug('bad date');
}else{
log.debug('good date');
}
是一种可能。另一种方式是
if(whatDate.toString() == 'NaN'){
log.debug('bad date');
}else{
log.debug('good date');
}
在您的 if 语句中,您正在检查 whatDate 是否等于字符串“NaN”。 what 你想检查 whatDate 是否是一个数字。
你可以试试
if (isNaN(whatDate))
下面的答案,除了已经解释过的关于如何检测 NaN
值的内容之外,还想进一步深入。
一个检查或测试函数,特别是如果它的名称中还带有 前缀 is
应该始终 return 完全 布尔值值.
- 因此 OP 首先会以用户期望的方式实现这样的功能。
- 其次,OP 在测试函数的实现中只处理了一次
NaN
问题。
编辑 根据并感谢 RobG
的澄清...和... 根据 ECMAScript 的规范 instantiating a Date
object,传递给构造函数的参数将被解析并分配给内部 thisTimeValue
插槽。后者的数字类型是不可解析(无效)参数的 NaN
值。
任何 valueOf
相关操作都会 return 内部 thisTimeValue
槽的值。
任何 toString
相关操作都会根据后一个值计算日期字符串格式。对于 NaN
的 thisTimeValue
,returned 字符串值必须是 'Invalid Date'
.
因此验证/测试实施可能类似于...
function isParsableDateRepresentative(...args) {
return String(new Date(...args)) !== 'Invalid Date';
}
...但最好它应该更接近下一个提供的...
function isParsableDateRepresentative(...args) {
return !Number.isNaN(new Date(...args).valueOf());
}
测试:
function isParsableDateRepresentative(...args) {
return !Number.isNaN(new Date(...args).valueOf());
}
console.log('new Date("1/5/22") ...', new Date("1/5/22"));
console.log(
'isParsableDateRepresentative("1/5/22") ...',
isParsableDateRepresentative("1/5/22")
);
console.log('\nnew Date("test") ...', new Date("test"));
console.log(
'isParsableDateRepresentative("test") ...',
isParsableDateRepresentative("test")
);
console.log('\nnew Date(new Date("test")) ...', new Date(new Date("test")));
console.log(
'isParsableDateRepresentative(new Date("test")) ...',
isParsableDateRepresentative(new Date("test"))
);
console.log('\nnew Date() ...', new Date());
console.log(
'isParsableDateRepresentative() ...',
isParsableDateRepresentative()
);
console.log('\nnew Date(null) ...', new Date(null));
console.log(
'isParsableDateRepresentative(null) ...',
isParsableDateRepresentative(null)
);
console.log('\nnew Date(undefined) ...', new Date(undefined));
console.log(
'isParsableDateRepresentative(undefined) ...',
isParsableDateRepresentative(undefined)
);
console.log('\nnew Date("") ...', new Date(""));
console.log(
'isParsableDateRepresentative("") ...',
isParsableDateRepresentative("")
);
.as-console-wrapper { min-height: 100%!important; top: 0; }