两个日期之间的差异应该有效,但事实并非如此

时间:2017-02-02 14:20:17

标签: javascript

我有以下代码,应该简单地告诉我2个月之间的差异,但是它返回的所有内容都是1而且我无法理解它!

function parseDate(str) {
  function pad(s) { return (s < 10) ? '0' + s : s; }
  var d = new Date(str);
  return d;
}

Array.prototype.monthDifference = function() {
  var months = this[1].getMonth() - this[0].getMonth() + (12 * (this[1].getFullYear() - this[0].getFullYear()));

  if(this[1].getDate() < this[0].getDate()){
    months--;
  }
  return months;
};

console.log([parseDate('01/01/2017'), parseDate('02/04/2017')].monthDifference());

修改

好的,请参阅下面的更新代码:

Array.prototype.monthDifference = function() {
  console.log((this[1].getMonth()+1) - (this[0].getMonth()+1));
  var months = (this[1].getMonth()+1) - (this[0].getMonth()+1) + (12 * (this[1].getFullYear() - this[0].getFullYear()));

  if(this[1].getDate() < this[0].getDate()){
      months--;
  }
  return (months > 1) ? 0 : months;
};

[pubDate, new Date()].monthDifference();

现在输出,其中一个数字是负数而另一个是正数!?并与今天和过去的日期进行比较......

1
Sat Apr 27 1907 00:00:00 GMT+0100 (BST) Wed May 28 1902 00:00:00 GMT+0100 (BST)
-10
Wed Mar 26 1930 00:00:00 GMT+0000 (GMT) Wed May 28 1902 00:00:00 GMT+0100 (BST)
-10
Tue Mar 26 1929 00:00:00 GMT+0000 (GMT) Wed May 28 1902 00:00:00 GMT+0100 (BST)
-10
Tue Mar 26 1929 00:00:00 GMT+0000 (GMT) Wed May 28 1902 00:00:00 GMT+0100 (BST)
-1
Tue Jun 24 1913 00:00:00 GMT+0100 (BST) Wed May 28 1902 00:00:00 GMT+0100 (BST)

3 个答案:

答案 0 :(得分:1)

这个怎么样? 它给出了两个日期之间的天数。

Array.prototype.monthDifference = function() {
var b = this[0].getTime();
var x = this[1].getTime();
var y = x-b;
return Math.floor(y / (24*60*60*1000));
};

var a = [];
a.push(parseDate('01/01/2016'));
a.push(parseDate('02/04/2017'));
console.log(a.monthDifference());

答案 1 :(得分:1)

JavaScript Date构造函数不解析UK格式的字符串(dd / mm / yyyy)。 您可以拆分日期字符串,然后将其传递给Date构造函数。

工作小提琴:Date foramte fiddle

function formateDateToUK(dateString){
 var splitDate = dateString.split('/'),
     day = splitDate[0],
     month = splitDate[1] - 1, //Javascript months are 0-11
     year = splitDate[2],
     formatedDate = new Date(year, month, day);

    return formatedDate;
 }

答案 2 :(得分:0)

你的功能返回&#39; 1&#39;,因为它是正确的结果:)

尝试:

console.log([parseDate('01/01/2017'), parseDate('07/01/2017')].monthDifference());

它返回&#39; 6&#39; ...这是正确的。

注意:&#39;新日期(str)&#39;期待&#34; MM / dd / yyyy&#34;不是&#34; dd / MM / yyyy&#34;。

希望这有帮助