5

我有一个函数可以将日期从 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'));
4

3 回答 3

3

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

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

有 4 种方法Date可以使用构造函数初始化对象

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)

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

于 2013-09-05T09:22:08.263 回答
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;
 }   
}
于 2013-09-05T09:30:24.023 回答
1
new Date(dateString)

接受以下格式(仅):

"October 13, 1975 11:13:00"
"October 13, 1975 11:13"
"October 13, 1975"
于 2013-09-05T09:33:42.097 回答