使用JavaScript计算剩余特定日期的天数

时间:2014-10-19 18:36:26

标签: javascript date days

我试图计算特定日期之前的剩余天数。我知道有一百万种不同的方法和教程,但我想自己编写代码。问题是函数的输出是" NaN"。我非常感谢你的帮助。

这是我的代码:

var daysLeft = function(input) {
    var num = '';
    var date = [];
    var x = 0;
    for (i = 0; i < input.length; i++) {
        if (!isNaN(input.charAt(i))) {
            num += input.charAt(i);
        }
        else {
            date[x] = parseInt(num, 10);
            x++;
        }
    }
    var inputDate = new Date(date[2], date[1], date[0]);
    var today = new Date();
    var timeDiff = Math.abs(inputDate.getTime() - today.getTime());
    return Math.ceil(timeDiff / (1000*3600*24));
};

daysLeft("11.12.2014"); 

BTW:我写了这段代码,因为Date()函数使用美国格式的日期(MM / dd / YYYY)而不是UTC日期。我也知道有Date.UTC()函数,但无论如何。我只想自己转过几个月和几天。

3 个答案:

答案 0 :(得分:1)

当您解析num以设置date[x]时,您需要将num重置为''

...
else {
    date[x] = parseInt(num, 10);
    x++;
    num = '';
}

您可以考虑使用String.split()分隔期间的输入。

答案 1 :(得分:1)

我的解决方案是:

function isNumeric(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

var daysLeft = function(input) {
    var num = '';
    var date = [];
    var x = 0;
    for (i = 0; i < input.length; i++) {
        if (!isNaN(input.charAt(i)) && isNumeric(input.charAt(i))) {
            num += input.charAt(i);
        }
        else {
            date[x] = parseInt(num, 10);
            x++;
            num = '';
        }
    }
    date[x] = parseInt(num, 10);

    var inputDate = new Date(date[2], date[1], date[0]);
    var today = new Date();
    var timeDiff = Math.abs(inputDate.getTime() - today.getTime());
    return Math.ceil(timeDiff / (1000*3600*24));
};

但更好的是:

function parseDate(input) {
  var parts = input.split('-');
  // new Date(year, month [, day [, hours[, minutes[, seconds[, ms]]]]])
  return new Date(parts[0], parts[1]-1, parts[2]); // Note: months are 0-based
}

var daysLeft = function(input) {    
    var inputDate = parseDate(input);
    var today = new Date();
    var timeDiff = Math.abs(inputDate.getTime() - today.getTime());
    return Math.ceil(timeDiff / (1000*3600*24));
};

答案 2 :(得分:0)

你应该使用这样的东西:

var daysLeft = function(input) {
    var num = '';
    var date = [];
    var x = 0;
    for (i = 0; i < input.length; i++) {
        if (!isNaN(input.charAt(i))) {
            num += input.charAt(i);
        }
        else {
            date[x] = parseInt(num, 10);
            x++;
            num='';
        }
    }
    date[x] = parseInt(num, 10);
    var inputDate = new Date(date[2], date[1], date[0]);
    var today = new Date();
    var timeDiff = Math.abs(inputDate.getTime() - today.getTime());
    return Math.ceil(timeDiff / (1000*3600*24));
};
daysLeft("11.12.2014");