如何计算两个日期之间的天数

Vai*_*ukh 243 javascript

我有两个输入日期来自日期选择器控件.我选择了开始日期2/2/2012和结束日期2/7/2012.我已经为此编写了以下代码.

我应该得到结果6但我得到5.

function SetDays(invoker) {   
    var start = $find('<%=StartWebDatePicker.ClientID%>').get_value();
    var end = $find('<%=EndWebDatePicker.ClientID%>').get_value();

    var oneDay=1000 * 60 * 60 * 24;
    var difference_ms = Math.abs(end.getTime() - start.getTime())
    var diffValue = Math.round(difference_ms / oneDay);
}
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何才能得到确切的区别?

Sup*_*upr 586

http://momentjs.com/https://date-fns.org/

从Moment docs:

var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, 'days')   // =1
Run Code Online (Sandbox Code Playgroud)

或者包括开头:

a.diff(b, 'days')+1   // =2
Run Code Online (Sandbox Code Playgroud)

节拍手动弄乱时间戳和时区.

根据您的具体用例,您也可以

  1. 使用a/b.startOf('day')和/或a/b.endOf('day')强制差异在"结束"处包含或排除(如评论中的@kotpal所示).
  2. 设置第三个参数true来获得,然后可以浮点差异Math.floor,Math.ceilMath.round根据需要.
  3. 选项2也可以通过获取'seconds'而不是'days'然后除以来完成24*60*60.

  • 如果a <b,moment.js将给出负值.因此,更强大的计算将是:```Math.abs(a.diff(b,'days'))+ 1``` (22认同)
  • 请注意忽略时间部分 - 否则您将在同一日期但不同时间获得不同的结果(例如来自日期选择器控件).使用moment(someDate).startOf('day')在执行diff(或对Date/moment对象的时间部分敏感的任何其他操作)之前将时间部分显式设置为00:00:00 (13认同)
  • 请注意,`startOf`会改变瞬间。如果您不想这样做,请执行`a.clone()。startOf('day')。diff(b.clone()。startOf('day'))`。 (2认同)

Rak*_*ati 36

如果您使用moment.js,您可以轻松完成.

var start = moment("2018-03-10", "YYYY-MM-DD");
var end = moment("2018-03-15", "YYYY-MM-DD");

//Difference in number of days
moment.duration(start.diff(end)).asDays();

//Difference in number of weeks
moment.duration(start.diff(end)).asWeeks();
Run Code Online (Sandbox Code Playgroud)

如果要查找给定日期和当前日期之间的天数(忽略时间),请确保从当前日期的当前对象中删除时间,如下所示

moment().startOf('day')
Run Code Online (Sandbox Code Playgroud)

查找给定日期和当前日期之间的天数差异

var given = moment("2018-03-10", "YYYY-MM-DD");
var current = moment().startOf('day');

//Difference in number of days
moment.duration(given.diff(current)).asDays();
Run Code Online (Sandbox Code Playgroud)

  • asDays()向我返回了一些带有小数的值。我使用`current.diff(given,'days')`来四舍五入。 (2认同)

Ric*_*ard 14

尝试:

//Difference in days

var diff =  Math.floor(( start - end ) / 86400000);
alert(diff);
Run Code Online (Sandbox Code Playgroud)

  • 我不喜欢*魔术数字* ..如果那个数字分解成一个不言自明的方程会更好 (4认同)

小智 9

这对我有用:

const from = '2019-01-01';
const to   = '2019-01-08';

Math.abs(
    moment(from, 'YYYY-MM-DD')
      .startOf('day')
      .diff(moment(to, 'YYYY-MM-DD').startOf('day'), 'days')
  ) + 1
);
Run Code Online (Sandbox Code Playgroud)


Sum*_*mit 6

试试这个使用moment.js(在JavaScript中计算日期操作非常容易)

firstDate.diff(secondDate,'days',false); //分数值的true | false

结果将为您提供整数天数。

  • 这是签名: moment().diff(Moment|String|Number|Date|Array, String, Boolean); (2认同)

Dav*_*vid 5

您也可以使用以下代码:moment("yourDateHere", "YYYY-MM-DD").fromNow()。这将计算今天和您提供的日期之间的差异。


Phi*_*ume 5

我使用 Moment.js 在 ES6 中创建了一个快速可重用的函数。

const getDaysDiff = (start_date, end_date, date_format = 'YYYY-MM-DD') => {
  const getDateAsArray = (date) => {
    return moment(date.split(/\D+/), date_format);
  }
  return getDateAsArray(end_date).diff(getDateAsArray(start_date), 'days') + 1;
}

console.log(getDaysDiff('2019-10-01', '2019-10-30'));
console.log(getDaysDiff('2019/10/01', '2019/10/30'));
console.log(getDaysDiff('2019.10-01', '2019.10 30'));
console.log(getDaysDiff('2019 10 01', '2019 10 30'));
console.log(getDaysDiff('+++++2019!!/###10/$$01', '2019-10-30'));
console.log(getDaysDiff('2019-10-01-2019', '2019-10-30'));
console.log(getDaysDiff('10-01-2019', '10-30-2019', 'MM-DD-YYYY'));

console.log(getDaysDiff('10-01-2019', '10-30-2019'));
console.log(getDaysDiff('10-01-2019', '2019-10-30', 'MM-DD-YYYY'));
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js"></script>
Run Code Online (Sandbox Code Playgroud)