javascript 如何获得日期在 yyyy-mm-dd 中的年份差异?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/11346069/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-26 12:52:21  来源:igfitidea点击:

how to get difference in year where dates are in yyyy-mm-dd?

javascript

提问by Manish Malviya

i want to get the difference between two dates which are give in yyyy-mm-dd format difference should be in year.

我想得到以 yyyy-mm-dd 格式给出的两个日期之间的差异,差异应该是年份。

        var ds='2002-09-23';
        var today_date = new Date();
        alert(today_date);
        Date.prototype.yyyymmdd = function() {
        var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based
        var dd  = this.getDate().toString();
        var dt = yyyy +"-"+(mm[1]?mm:"0"+mm[0]) +"-"+ (dd[1]?dd:"0"+dd[0]);// padding
        var num_years = diff_date/31536000000;
        alert(num_years);
        if (num_years>18){
           alert (num_years);
        }else{
        alert ("i m not 18");
               }

please help me out.

请帮帮我。

回答by adius

This is much shorter:

这要短得多:

var yearsApart = new Date(new Date - new Date('2002-09-23')).getFullYear()-1970

… but be careful to take care of non UTC time zones by providing the correct datetime string!

...但请注意通过提供正确的日期时间字符串来处理非 UTC 时区!

回答by Nikola Anusev

You need no library for this, just pure javascript:

你不需要库,只需要纯 javascript:

function wholeYearsBetweenTwoDates(dateOneString, dateTwoString) {
    // assuming that dateTwo is later in time than dateOne
    var dateOne = getDateFromString(dateOneString);
    var dateTwo = getDateFromString(dateTwoString);

    var result = dateTwo.getFullYear() - dateOne.getFullYear();

    dateOne.setFullYear(dateTwo.getFullYear());
    if (dateOne > dateTwo) {
        // compensate for the case when last year is not full - e.g., when
        // provided with '2009-10-10' and '2010-10-09', this will return 0
        result -= 1;
    }

    return result;
}

function getDateFromString(stringDate) {
    var dateParts = stringDate.split('-');
    var result = new Date(dateParts[0], dateParts[1], dateParts[2]);
    return result;
}

回答by Split Your Infinity

Try the following code to get the difference in years...

尝试使用以下代码来获得年份的差异...

function getDateDiffInYears(date1, date2) {
  var dateParts1 = date1.split('-')
    , dateParts2 = date2.split('-')
    , d1 = new Date(dateParts1[0], dateParts1[1]-1, dateParts1[2])
    , d2 = new Date(dateParts2[0], dateParts2[1]-1, dateParts2[2])

  return new Date(d2 - d1).getYear() - new Date(0).getYear() + 1;
}

var diff = getDateDiffInYears('2005-09-23', '2012-07-3');

console.log(diff); // => 7 years

Good luck!

祝你好运!

回答by sbonoc

I had been using the formula var yearsApart=milli/milliPerYearbut when the day and the month are the same the rounded value is not correct.

我一直在使用该公式,var yearsApart=milli/milliPerYear但是当日和月相同时,四舍五入的值不正确。

Here you have the script I'm using right now ...

在这里你有我现在正在使用的脚本......

function yearDifferenceDates(firstDateDay, firstDateMonth, firstDateYear, secondDateDay, secondDateMonth, secondDateYear) {

    var fisrtDate   = new Date(firstDateYear, firstDateMonth - 1, firstDateDay);
    var secondDate  = new Date(secondDateYear, secondDateMonth - 1, secondDateDay);

    if(firstDateDay == secondDateDay && (firstDateMonth - 1) == (secondDateMonth - 1)) {
        return Math.round((secondDate-fisrtDate)/(1000*60*60*24*365.242199));
    }

    return Math.floor((secondDate-fisrtDate)/(1000*60*60*24*365.242199));
}

回答by Adriano Repetti

First you have to pick a JavaScript library for parsingdates using a format string(so you can provide date in the format you prefer). Try this great library(at least you do not have to care about implementation details. Dateconstructor and Date.parsemethods must match but it's not mandatory they can parse a simple date in that format).

首先,您必须选择一个 JavaScript 库来使用格式字符串解析日期(这样您就可以以您喜欢的格式提供日期)。试试这个很棒的库(至少你不必关心实现细节。构造函数和方法必须匹配,但它们可以解析该格式的简单日期并不是强制性的)。DateDate.parse

var date1 = getDateFromFormat("1999-10-10", "YYYY-MM-DD");
var date2 = getDateFromFormat("2012-10-10", "YYYY-MM-DD");

Then, when you have to calculate the difference:

然后,当您必须计算差异时:

var millisecondsPerSecond = 1000;
var millisecondsPerMinute = millisecondsPerSecond * 60;
var millisecondsPerHour = millisecondsPerMinute * 60;
var millisecondsPerDay = millisecondsPerHour * 24;
var millisecondsPerYear = millisecondsPerDay * 365.26;

var years = Math.round((date2 - date1) / millisecondsPerYear);

If you need a raw calculation you can use getFullYear()directly.

如果您需要原始计算,您可以getFullYear()直接使用。

回答by Mel Stanley

You can compare dates more easily if you convert them to their millisecond values.

如果将日期转换为毫秒值,则可以更轻松地比较日期。

var birthday = new Date('2002-09-23');
var now = new Date();
var age = now.getTime() - birthday.getTime();

if (age < (1000 * 60 * 60 * 24 * 365 * 18)) { // number of milliseconds in 18 years
   document.write('not over 18');
} else {
  document.write('over 18');
}

回答by setaloro

Above has a little bug but this work :)

上面有一个小错误,但这项工作:)

NOT WORKING:   var millisecondsPerHour = millisecondsPerMinute = 60;
WORKING FINE:  var millisecondsPerHour = millisecondsPerMinute * 60;

But thx Adriano Repetti

但是谢谢阿德里亚诺·雷佩蒂

Here the complete code (with dot Format)

这里是完整的代码(带点格式)

var date1 = "01.01.2014";
var date2 = "31.12.2016";

var date1 = date1.split(".");
var date2 = date2.split(".");

date1 = String(date1[2] +"-"+ date1[1] +"-"+ date1[0]);
date2 = String(date2[2] +"-"+ date2[1] +"-"+ date2[0]);

var date1 = Date.parse(date1);
var date2 = Date.parse(date2);


//(Not for Europa :) )
//var date1 = Date.parse("2014-01-01");
//var date2 = Date.parse("2016-12-31");

var millisecondsPerSecond = 1000;
var millisecondsPerMinute = millisecondsPerSecond * 60;
var millisecondsPerHour = millisecondsPerMinute * 60;
var millisecondsPerDay = millisecondsPerHour * 24;
var millisecondsPerYear = millisecondsPerDay * 365.26;

// IN YEARS
var years = (date2 - date1) / millisecondsPerYear;

// IN MONTHS
var month = years * 12 // Very tricky, I know ;)

回答by scusyxx

var d1=new Date(2002, 9, 23);
var d2=new Date();

var milli=d2-d1;
var milliPerYear=1000*60*60*24*365.26;

var yearsApart=milli/milliPerYear;

console.log(yearsApart)