Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止JavaScript日期构造函数接受无效日期?_Javascript_Date - Fatal编程技术网

如何防止JavaScript日期构造函数接受无效日期?

如何防止JavaScript日期构造函数接受无效日期?,javascript,date,Javascript,Date,我意识到这可能是一个特性,但我需要日期构造函数在无效日期时退出,而不是自动将其滚动到适当的日期。实现这一目标的最佳方式是什么 new Date('02/31/2015'); 变成 Tue Mar 03 2015 00:00:00 GMT-0500 (EST) 很抱歉,如果已经问过了,我无法/我太笨了,找不到:)。似乎您无法强制在非法日期失败。在声明中,观察到的行为应该只在使用多个参数调用构造函数时发生,但该条件似乎不成立(至少在Chrome40上不成立) 但是,您可以重新转换日期并将其与原始

我意识到这可能是一个特性,但我需要日期构造函数在无效日期时退出,而不是自动将其滚动到适当的日期。实现这一目标的最佳方式是什么

new Date('02/31/2015');
变成

Tue Mar 03 2015 00:00:00 GMT-0500 (EST)

很抱歉,如果已经问过了,我无法/我太笨了,找不到:)。

似乎您无法强制在非法日期失败。在声明中,观察到的行为应该只在使用多个参数调用构造函数时发生,但该条件似乎不成立(至少在Chrome40上不成立)

但是,您可以重新转换日期并将其与原始字符串进行比较:

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
}

不能将JavaScript日期对象设置为无效日期


但是,您可能需要。

如果可以将字符串输入格式化为数字(没有工作日或月份名称),则可以在创建日期对象之前查看输入

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;
}
validDate('02/29/2015')

/*返回值:(数字) 楠
*/

我最终使用了。它具有验证和溢出计算以及其他日期对象增强功能。感谢Kevin Williams自己分析日期字符串。
mydate.setTime(NaN)
2月31日不是无效吗?因为我可以将它发送给日期构造函数。并不是说我不相信你,我只是不明白。对于几年后阅读此答案的人,请注意,矩.js库不再受支持,人们应该找到其他库来管理日期/时间。