是否想在js中获取两个日期之间的差异?

时间:2018-09-13 07:30:33

标签: javascript date

我在堆栈溢出本身上尝试了很多解决方案,但在js中没有得到区别。

我正在使用

var days = ('13-10-2018'- '13-09-2018') / (1000 * 60 * 60 * 24)]

2 个答案:

答案 0 :(得分:1)

好吧,这里有2个问题。

首先,您需要使用日期字符串来构造适当的JavaScript Date对象,该对象仅支持符合IETF的RFC 2822时间戳以及ISO8601版本,如您在MDN中所见。因此,您不能使用DD-MM-YYYY,但可以使用MM-DD-YYYY

构造Date对象的另一种方法是使用以下语法:

new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);

因此,要计算格式为DD-MM-YYYY的两个日期之间的差,您首先需要解析它并创建两个Date对象。然后,您分别调用Date.prototype.getTime()并计算绝对差(以毫秒为单位)。最后,将其转换为除以3600000 * 24并四舍五入的天数(如果您不希望使用小数天):

function getDateFromDDMMYYYY(dateString) {
  const [day, month, year] = dateString.split('/');
    
  return new Date(
    parseInt(year),
    parseInt(month) - 1,
    parseInt(day)
  );
}

const diff = Math.abs(getDateFromDDMMYYYY('13/10/2018').getTime() - getDateFromDDMMYYYY('13/09/2018').getTime());
const days = Math.round(diff / (3600000 * 24)); 

console.log(`${ days } ${ days === 1 ? 'day' : 'days' }`);

答案 1 :(得分:0)

您尝试减去日期的方式('13 -10-2018'- '13 -09-2018')是错误的。这将产生错误NaN(不是数字),因为例如'13 -10-2018'是一个字符串,并且不能自动转换为Date对象。如果您询问'100'-'20',这将为您提供80,因为javascript自动解析一个字符串,当应用算术运算符时,该字符串可以转换为整数或浮点数,但在您的情况下,可以使用'13 -10-2018''不能解析为整数或浮点数,因为解析它不会给出任何数字。

如果日期采用 string 格式,则可以按照以下方式解析日期,然后执行一些操作,因为您的日期采用 DD-MM-YYYY 您可以在 MM-DD-YYYY YYYY-MM-DD 中对其进行更改,有关日期的更多信息,请查阅此link

let timeDifference = Math.abs(new Date('10-13-2018') - new Date('09-13-2018'));
console.log(Math.ceil( timeDifference / (1000 * 60 * 60 * 24)));

新日期('10 -13-2018')-新日期('09 -13-2018')将给您2592000000毫秒,因为时间表示为Unix time。您可以通过以下操作检查任何日期的Unix时间。

console.log(new Date().getTime('10-13-2018'));

现在幕后的计算是2592000000/1000 * 60 * 60 * 24(即一天中的总毫秒数)= 30天