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

JavaScript中两个日期(年、月、日)之间的差异

司寇烨伟
2023-03-14

我已经搜索了4个小时了,但是还没有找到一个用JavaScript计算两个日期(年、月和天)之间差异的解决方案,比如:2010年4月10日是3年、x月和y天之前。

有很多解决方案,但它们只提供了日、月或年的格式差异,或者它们不正确(意味着没有考虑一个月或闰年的实际天数,等等)。做那件事真的有那么难吗?

我看了一下:

  • http://momentjs.com/->只能输出年、月或天的差异
  • http://www.javascriptkit.com/javatutors/datedifference.shtml
  • http://www.javascriptkit.com/jsref/date.shtml
  • http://timeago.yarp.com/
  • www.stackoverflow.com->搜索功能

在php中,这很容易,但不幸的是,我只能在该项目上使用客户端脚本。任何库或框架都可以做到这一点。

以下是日期差异的预期输出列表:

//Expected output should be: "1 year, 5 months".
diffDate(new Date('2014-05-10'), new Date('2015-10-10'));

//Expected output should be: "1 year, 4 months, 29 days".
diffDate(new Date('2014-05-10'), new Date('2015-10-09'));

//Expected output should be: "1 year, 3 months, 30 days".
diffDate(new Date('2014-05-10'), new Date('2015-09-09'));

//Expected output should be: "9 months, 27 days".
diffDate(new Date('2014-05-10'), new Date('2015-03-09'));

//Expected output should be: "1 year, 9 months, 28 days".
diffDate(new Date('2014-05-10'), new Date('2016-03-09'));

//Expected output should be: "1 year, 10 months, 1 days".
diffDate(new Date('2014-05-10'), new Date('2016-03-11'));

共有1个答案

爱博达
2023-03-14

你需要精确到什么程度?如果您确实需要考虑普通年份和闰年,以及月份之间天数的确切差异,那么您就必须编写一些更高级的内容,但对于基本和粗略的计算,这应该会起到作用:

today = new Date()
past = new Date(2010,05,01) // remember this is equivalent to 06 01 2010
//dates in js are counted from 0, so 05 is june

function calcDate(date1,date2) {
    var diff = Math.floor(date1.getTime() - date2.getTime());
    var day = 1000 * 60 * 60 * 24;

    var days = Math.floor(diff/day);
    var months = Math.floor(days/31);
    var years = Math.floor(months/12);

    var message = date2.toDateString();
    message += " was "
    message += days + " days " 
    message += months + " months "
    message += years + " years ago \n"

    return message
    }


a = calcDate(today,past)
console.log(a) // returns Tue Jun 01 2010 was 1143 days 36 months 3 years ago

请记住,这是不精确的,为了完全精确地计算日期,一个人必须有一个日历,并知道一年是不是闰年,而且我计算月数的方法只是近似的。

但你可以很容易地改进它。

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

  • 问题内容: 如何计算JavaScript中两个Date()对象的差异,而只返回差异中的月数? 任何帮助将是巨大的:) 问题答案: “差异中的月数”的定义要经过很多解释。:-) 您可以从JavaScript日期对象获取年,月和日。根据您要查找的信息,可以使用这些信息来计算两个时间点之间有多少个月。 例如,现成的,它找出两个日期之间有多少 整月 ,而不计算部分月份(例如,不包括每个日期所在的月份):

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

  • 我有两次约会。一个是以YYYYMMDD格式从其他应用程序的表中检索的,第二个日期是本地时间,我需要这两个日期之间的天数/月/年。 我试过了 但这给了我一些乱七八糟的数字。 变量$t=Fri Dec31 00:00:00 9999 变量$今天=Wed Feb19 14:40:55 2020 产出:25182094888 有什么想法吗?提前谢谢。

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

  • 问题内容: 请参考以下示例,并请告诉我您的想法。 输出= 预期输出= 由于我在十一月只有15天,所以我应该去十一月 问题答案: 试试这个 或者