【问题标题】:Calculate days left to a specific date with JavaScript使用 JavaScript 计算距特定日期的剩余天数
【发布时间】:2014-10-19 18:36:26
【问题描述】:

我试图计算距离特定日期的剩余天数。我知道有上百万种不同的方法和教程,但我想自己写一个代码。问题是函数的输出是“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"); 

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

【问题讨论】:

  • 插入console.log(date);' after for`循环并在此处发布输出
  • 输出为 1,101,输入为“01.01.2015”

标签: javascript date days


【解决方案1】:

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

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

您可以考虑使用String.split() 在句点处分隔您的输入。

【讨论】:

    【解决方案2】:

    我的解决方案是:

    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));
    };
    

    【讨论】:

      【解决方案3】:

      你应该使用这样的东西:

      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"); 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-13
        • 2014-06-11
        • 2020-02-14
        • 1970-01-01
        • 2014-11-26
        • 1970-01-01
        • 1970-01-01
        • 2013-06-26
        相关资源
        最近更新 更多