Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果日期为yyyy mm dd,如何获得年份差异?_Javascript - Fatal编程技术网

Javascript 如果日期为yyyy mm dd,如何获得年份差异?

Javascript 如果日期为yyyy mm dd,如何获得年份差异?,javascript,Javascript,我想得到以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-

我想得到以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");
               }

请帮助我。

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

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)
然后,当您必须计算差异时:

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);

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

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

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');
}
var生日=新日期('2002-09-23');
var now=新日期();
var age=now.getTime()-生日.getTime();
如果(年龄<(1000*60*60*24*365*18)){//18年中的毫秒数
文件。填写(‘不超过18’);
}否则{
文件。填写(‘超过18’);
}

这不需要库,只需要纯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;
}

请尝试以下代码以获得年份差异

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

祝你好运

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

这是我现在使用的脚本

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));
}
这要短得多:

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

…但是要小心,通过提供正确的日期时间字符串来处理非UTC时区

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

但是泰克斯阿德里亚诺·雷佩蒂

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


那么,对于
'2011-12-31'
'2012-01-01'
它应该返回
1
(年)?为什么
365.26
天?为什么不
365
?@SharikovVladislav因为闰年。但这只是在一般情况下的工作——即在日期之间的年份非常大的时候,请考虑编辑您的帖子,以添加更多关于您的代码所做的解释以及为什么它会解决问题的解释。大部分只包含代码的答案(即使有效)通常不会帮助OP理解他们的问题。
Date.getFullYear()
Date.toISOString()短。slice(0,4)
此方法适用于1970年之前的日期吗?
var yearsApart = new Date(new Date - new Date('2002-09-23')).getFullYear()-1970
NOT WORKING:   var millisecondsPerHour = millisecondsPerMinute = 60;
WORKING FINE:  var millisecondsPerHour = millisecondsPerMinute * 60;
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 ;)