Moment.js-两个日期在天数上的差异

当我试图找出两个日期之间的数字差异时,我得到了不正确的结果:

var startDate = moment( $('[name="date-start"]').val(), "DD.MM.YYYY"), // $('[name="date-start"]').val() === "13.04.2016"
endDate       = moment( $('[name="date-end"]'  ).val(), "DD.MM.YYYY"); // $('[name="date-end"]').val() === "28.04.2016"


var diff = startDate.diff(endDate);


console.log( moment(diff).format('E') );

13.04.201628.04.2016之间,我不应该得到差异是 32天..。

我试过多种组合:

  • endDate.diff(startDate)交换 startDate.diff(endDate)
  • format('E')和一些我在搜索 SO 时发现的东西

结果: 所有的时间我得到的差异是3或2天。

我做错了什么? 先谢谢你。

160349 次浏览

从现在开始 医生: format('E')代表星期几。因此你的差值是在一周中的哪一天计算的,它必须在1到7之间。

从现在开始,js 文档再次给出了他们的建议:

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

下面是针对您的特殊情况的 JSFiddle:

$('#test').click(function() {
var startDate = moment("13.04.2016", "DD.MM.YYYY");
var endDate = moment("28.04.2016", "DD.MM.YYYY");


var result = 'Diff: ' + endDate.diff(startDate, 'days');


$('#result').html(result);
});
#test {
width: 100px;
height: 100px;
background: #ffb;
padding: 10px;
border: 2px solid #999;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.12.0/moment.js"></script>


<div id='test'>Click Me!!!</div>
<div id='result'></div>

diff方法以毫秒为单位返回差值。实例化 moment(diff)是没有意义的。

您可以定义一个变量:

var dayInMilliseconds = 1000 * 60 * 60 * 24;

然后像这样使用它:

diff / dayInMilliseconds // --> 15

剪辑

实际上,这是内置在 diff的方法,配音的答案是更好的

下面就是你如何获得两次约会完全不同的方法。

 function diffYMDHMS(date1, date2) {


let years = date1.diff(date2, 'year');
date2.add(years, 'years');


let months = date1.diff(date2, 'months');
date2.add(months, 'months');


let days = date1.diff(date2, 'days');
date2.add(days, 'days');


let hours = date1.diff(date2, 'hours');
date2.add(hours, 'hours');


let minutes = date1.diff(date2, 'minutes');
date2.add(minutes, 'minutes');


let seconds = date1.diff(date2, 'seconds');


console.log(years + ' years ' + months + ' months ' + days + ' days ' + hours + '
hours ' + minutes + ' minutes ' + seconds + ' seconds');


return { years, months, days, hours, minutes, seconds};
}
const FindDate = (date, allDate) => {
        

// moment().diff only works on moment(). Make sure both date and elements in allDate array are in moment format
let nearestDate = -1;
    

allDate.some(d => {
const currentDate = moment(d)
const difference = currentDate.diff(d); // Or d.diff(date) depending on what you're trying to find
if(difference >= 0){
nearestDate = d
}
});
    

console.log(nearestDate)
}

使用 moment.js查找日期之间的差异。

使用以下命令安装 Moment.js,

npm install moment

以天为单位计算两个日期之间的差额。

var moment = require('moment');


var date1 = moment("2022-10-30");
var date2 = moment("2022-12-30");
var days = date1.diff(date2, 'days')