我有以下的javascript
datefrom = new Date(event.min);
if (datefrom != 'Invalid Date') {
var day = datefrom.getDate();
var month = datefrom.getMonth() + 1; //Months are zero based
var year = datefrom.getFullYear();
var hour = datefrom.getHours();
var min = datefrom.getMinutes();
if (day < 10)
day = "0" + day;
if (month < 10)
month = "0" + month;
if (hour < 10)
hour = "0" + hour;
if (min < 10)
min = "0" + min;
datefrom = day + "/" + month + "/" + year + " " + hour + ":" + min;
$("#DateBox1").val(datefrom);
}
else {
alert('IM HERE!!!');
$("#DateBox2").val(originalFrom);
}在使用Chrome和FireFox的应用程序时,我可以成功地进入else语句并发出警告:“!没有麻烦,因为datefrom是无效的日期。
然而,IE声明日期是从is NaN开始的,由于某种原因,我无法进入the语句。
我已经在if语句中放置了alrets,以查看我在运行时的位置,并且由于某些原因,我无法进入“否则”,并在IE中设置正确的值。为什么会发生这种事?
发布于 2014-04-02 08:48:50
它将有助于了解输入值是什么,但通常您需要注意,在使用内置Date对象时,存在许多已知的跨浏览器怪癖。在一个浏览器中成功解析为日期的字符串在另一个浏览器中可能不被视为有效。
其次,对"Invalid Date"的测试可能不是确定日期是否有效的最佳方法。我认为if(isNaN(datefrom.getDate()))可能是一个更好的测试。
最后,如果要解析日期字符串,您可能需要考虑使用第三方库之一,它可以使JS中的日期更容易使用。查找Date.js或Moment.js。这些库将为您提供更好的跨浏览器兼容性,以及标准日期对象中没有的附加功能。
发布于 2014-04-02 08:41:39
使用下面的行检查有效日期,而不是datefrom != 'Invalid Date'
if(datefrom.getTime === "function" && isFinite(datefrom.getTime()))发布于 2014-04-02 11:43:09
您还没有说明event.min是什么,所以我们只能猜测可能导致错误的原因。
日期构造函数将返回日期对象或NaN,因此测试datefrom != 'Invalid Date'应该始终为真,因为在实现符合任何ECMAScript版本的情况下,new Date(...)永远不会返回字符串“无效日期”。
如果结果是NaN,则意味着构造函数无法根据ECMA-262中的规则从传递给它的任何内容中创建有效的date对象,这可能意味着它是一个值,在转换为原语时:
在第一种情况下,有些实现可以成功地解析许多字符串,而另一些实现则不能成功地解析这些字符串。还有一些字符串可以由两个实现成功地解析(例如,导致一个日期对象),但会导致不同的日期,例如,2014-03-24T20:20:00将由Chrome (正确)处理为UTC,而(错误地)由Firefox作为本地处理。
https://stackoverflow.com/questions/22805703
复制相似问题