当前位置: 首页 > 知识库问答 >
问题:

如何使用moment获得年、月和日的两个日期之间的差异。js

乐正明辉
2023-03-14

如何获得之间的差异2日期在年,月和天使用moment.js?例如之间的差异4/5/2014

共有3个答案

羊舌庆
2023-03-14

这对我有用。用年龄计算器验证。

function calculateAge(){
    ageText = jQuery("#dob").closest(".form-group").find(".age-text");
    ageText.text("");
    level2.dob = jQuery("#dob").val();
    if(!level2.dob) return;
    level2.mdob= moment(level2.dob, 'DD-MM-YYYY');
    if(!level2.mdob.isValid()){
        alert("Invalid date format");
        return;
    }
    level2.targetDate = moment();//TODO: Fill in the target date
    level2.months = level2.targetDate.diff(level2.mdob, 'months'); // Calculate the months
    let years = parseInt(level2.months/12); // A year has 12 months irrespective or leap year or not
    let balanceMonths = level2.months%12; // The balance gives the number of months 
    let days;
    if(!balanceMonths){ // If no balance months, then the date selected lies in the same month
        months = 0; // so months = 0
        days = level2.targetDate.diff(level2.mdob, 'days'); // only the days difference
    }else{
    months = balanceMonths;
    dob_date = level2.mdob.date();
    target_month = level2.targetDate.month();
    construct_date = moment().month(target_month).date(dob_date);
    days = level2.targetDate.diff(construct_date, 'days')+1; // There might be one day missed out. Not sure on UTC
}

ageText = years +" years " + months+ " months " + days +" days";
}
皇甫乐
2023-03-14

你几乎不需要时间。

d1 = new Date(2014, 3, 5);                // April 5, 2014
d2 = new Date(2013, 1, 22);               // February 22, 2013
diff = new Date(
    d1.getFullYear()-d2.getFullYear(), 
    d1.getMonth()-d2.getMonth(), 
    d1.getDate()-d2.getDate()
);

这充分利用了Date构造函数对负值非常敏感这一事实。例如,如果月数为负数,它将考虑到这一点,并追溯到当年。

console.log(diff.getYear(), "Year(s),", 
    diff.getMonth(), "Month(s), and", 
    diff.getDate(), "Days.");

>> 1 Year(s), 1 Month(s), and 11 Days. 

你的计算是错误的——不是14天,而是2月剩下的6天和4月的前5天,所以是11天,正如计算机正确计算的那样。

考虑到@MattJohnson的评论,这可能会更好:

dy = d1.getYear()  - d2.getYear();
dm = d1.getMonth() - d2.getMonth();
dd = d1.getDate()  - d2.getDate();

if (dd < 0) { dm -= 1; dd += 30; }
if (dm < 0) { dy -= 1; dm += 12; }

console.log(dy, "Year(s),", dm, "Month(s), and", dd, "Days.");
王季萌
2023-03-14

片刻js无法直接处理这种情况。它确实允许您计算两个时刻之间的差值,但结果是以毫秒为单位的持续时间。Moment确实有一个Duration对象,但它将一个月定义为30天的固定单位——我们知道情况并非总是如此。

幸运的是,目前已经有一个名为“精确范围”的插件,它做了正确的事情。从来源来看,它做了一些类似于torazaburo答案的事情——但它恰当地考虑了一个月中需要调整的天数。

在项目中包含moment.js和此插件(readable-range.js)后,您可以简单地这样调用它:

var m1 = moment('2/22/2013','M/D/YYYY');
var m2 = moment('4/5/2014','M/D/YYYY');
var diff = moment.preciseDiff(m1, m2);
console.log(diff);

输出为“1年1月14天”

 类似资料:
  • 我已经搜索了4个小时了,但是还没有找到一个用JavaScript计算两个日期(年、月和天)之间差异的解决方案,比如:2010年4月10日是3年、x月和y天之前。 有很多解决方案,但它们只提供了日、月或年的格式差异,或者它们不正确(意味着没有考虑一个月或闰年的实际天数,等等)。做那件事真的有那么难吗? 我看了一下: http://momentjs.com/->只能输出年、月或天的差异 http://

  • 嗯,我在这里发现了很多这样的问题,试图获得年、月和日的两个日期之间的差异。。。但没有满足我要求的答案。 所以我写了一些计算的东西,它似乎是有效的,但也许这里的一些专家可以进行更正,或者帮助使这更简单。

  • 问题内容: 我可以使用MomentJs获得两个日期之间的差异,如下所示: 但是,我也想在适用时显示小时(仅当> = 60分钟过去时)。 但是,当我尝试使用以下方法检索工时时数: 它返回的是当前时间,而不是两个日期之间的小时数。 如何获得两个时刻之间的小时数差异? 问题答案: 你近了您只需要使用该方法请参阅docs。

  • 我有开始日期和结束日期。这两个日期之间的持续时间应该是年、月和日的形式。我是新来的java。当我运行下面的方法时,我得到的结果是0年12个月1天。请建议一个替代方案,以获得年,月和天的准确差异。

  • 问题内容: 我需要使用Java获取两个日期之间的差异。我需要数月之内的结果。 例: 开始日期= 2013-04-03结束日期= 2013-05-03结果应为1 如果间隔是 开始日期= 2013-04-03结束日期= 2014-04-03结果应为12 使用以下代码,我可以在几天内得到结果。我几个月后可以得到什么? 问题答案: 如果您无法使用JodaTime,则可以执行以下操作: 请注意,如果您的日期

  • 我试图在我正在创建的C#应用程序中显示两个日期之间的年、月和日。(使用控制台进行测试) 我正在使用NodaTime来实现这一点,但在接下来的几个月里,我遇到了一些问题。 我已经阅读了这里的大部分问题和答案,但没有找到任何我可以从中受益的东西。 大多数时候函数工作但有时它不添加月如果天 我使用这个代码进行测试 (2017, 10, 16)和(2018, 1, 15)应该显示为3个月,但它们显示为2个