如何防止JavaScript日期构造函数接受无效日期
How to prevent JavaScript Date Constructor from accepting invalid dates?
我意识到这可能是一个功能,但我需要日期构造函数在无效日期保释,而不是自动将其滚动到合适的日期。实现这一目标的最佳方法是什么?
new Date('02/31/2015');
成为
Tue Mar 03 2015 00:00:00 GMT-0500 (EST)
很抱歉,如果已经问过了,我找不到/太愚蠢了:)。
如果您可以指望字符串输入被格式化为数字(没有工作日或月份名称),那么您可以在创建Date对象之前查看输入。
function validDate(s){
//check for day-month order:
var ddmm= new Date('12/6/2009').getMonth()=== 5;
//arrange month,day, and year digits:
var A= s.split(/'D+/).slice(0, 3),
month= ddmm? A[1]: A[0],
day= ddmm? A[0]: A[1],
y= A.pop(),
//figure february for given year:
feb= y%4== 0 && (y%100 || y%400== 0)? 29: 28,
// set maximum days per month:
mdays= [0, 31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
//if the string is a valid calendar date, return a date object.
//else return NaN (or throw an Error):
return mdays[parseInt(month, 10)]-A[1]>= 0? new Date(s): NaN;
}
有效日期('02/29/2015')
/*返回值:(Number)NaN*/
似乎不能在非法日期强制失败。MDN文档声称,只有当使用多个参数调用构造函数时,才会出现观察到的行为,但这个条件似乎不成立(至少在chrome 40上不成立)。
但是,您可以重新转换日期并将其与原始字符串进行比较:
var s = '02/31/2015';
var d = new Date(s)
var s_re = d.toLocaleDateString('en-US', { year: 'numeric', month: '2-digit', day: '2-digit' } );
if (s === s_re) {
// ok
}
我最终使用了moment.js。它具有验证和溢出计算等Date对象增强功能。感谢Kevin Williams的
不能将JavaScriptDate对象设置为无效日期。
不过,您可能需要检查日期是否无效。
相关文章:
- 如何修复FF和IE中的Javascript无效日期错误
- 下周末'javascript中的s datetime返回无效日期
- Momentjs :如何防止“无效日期”
- 用户可以在AngularUI日期选择器中键入无效的日期
- 如何在一个代码中检查无效的日期格式和超过18年的有效期
- Moment会在设置日期时自动更正无效日期
- 在jquery日期选择器中禁用特定日期无效
- Javascript第一次的日期无效
- 返回的日期无效
- Javascript Date 中的日期无效
- Firefox 中的日期无效,在 JavaScript 中将字符串转换为日期(mm-dd-yyyy)
- 新日期(isoDate)上的日期无效
- jQuery UI日期选择器getDate今天返回's的日期无效
- firefox中的日期无效
- 夏威夷时区的日期使JavaScript日期无效
- 字符串格式的日期无效
- 无法将字符串转换为日期-无效日期
- 法语的日期无效
- bootstrap日期选择器设置默认日期无效
- 如何在 JS 中使 00/00/0000 日期无效