【问题标题】:JavaScript date comparison fails in IE8IE8 中的 JavaScript 日期比较失败
【发布时间】:2013-09-05 09:16:36
【问题描述】:

我有一个函数可以将日期从 DD/MM/YYYY 转换为 YYYY-MM-DD。

这适用于除 IE8 之外的所有浏览器,由于某种原因,当创建一个新的 Date 对象时,它会返回 NaN。

代码的基本实现 http://jsfiddle.net/bX83c/1/

var compareDate = function(value){
    var dateFragements = value.split('/');
    if (dateFragements.length == 3) {
        var currentDate = new Date();
            currentDate.setHours(0, 0, 0, 0);

        var startDate = new Date(dateFragements[2] + '-' + dateFragements[1] + '-' + dateFragements[0]);

        if (startDate >= currentDate) {
            return true;
        } else {
            return false;
        }
    }   
}
alert(compareDate('17/09/2013'));

【问题讨论】:

标签: javascript date internet-explorer-8 date-comparison


【解决方案1】:

像这样初始化你的日期。它适用于所有浏览器

var startDate = new Date(dateFragements[2] , dateFragements[1] , dateFragements[0]);

Date 对象可以通过 4 种方式使用构造函数初始化

new Date() // current date and time
new Date(milliseconds) //milliseconds since 1970/01/01
new Date(dateString)
new Date(year, month, day, hours, minutes, seconds, milliseconds)

日期对象中的字符串并不意味着它将接受所有日期字符串。如果你想给一个字符串作为输入,给这个。 (dateFragements[2] +'/' + dateFragements[1] + '/' + dateFragements[0]);。 (/作为分隔符)所有浏览器都会支持

【讨论】:

  • 这似乎已经解决了。你知道为什么用字符串初始化 Date 对象时 IE8 会失败吗?
  • 接受字符串并不意味着它会接受所有字符串。如果你想给一个字符串作为输入,给这个。 (dateFragements[2] +'/' + dateFragements[1] + '/' + dateFragements[0]);。所有浏览器都将支持它
【解决方案2】:

IE8 期望 '/' 作为日期字符串中的分隔符,这就是您的函数失败的原因。 可以简化为:

var compareDate = function(value){
 var dateFragements = value.split('/');
 if (dateFragements.length == 3) {
  var currentDate = function(){ return (this.setHours(0),
                                        this.setMinutes(0),
                                        this.setSeconds(0),
                                        this); }.call(new Date)
     ,startDate = new Date([dateFragements[2],
                            dateFragements[1],
                            dateFragements[0]].join('/'));
  return startDate>=currentDate;
 }   
}

【讨论】:

    【解决方案3】:
    new Date(dateString)
    

    接受以下格式(仅):

    "October 13, 1975 11:13:00"
    "October 13, 1975 11:13"
    "October 13, 1975"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 2019-03-12
      相关资源
      最近更新 更多