4

yyyy-mm-dd 形式で与えられた 2 つの日付の差を取得したいのですが、違いは年でなければなりません。

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

私を助けてください。

4

8 に答える 8

10

これははるかに短いです:

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

…ただし、正しい日時文字列を指定して、UTC 以外のタイム ゾーンに注意してください。

于 2014-04-19T14:45:31.577 に答える
2

これにはライブラリは必要ありません。純粋な 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;
}
于 2012-07-05T14:26:22.247 に答える
1

数式を使用していました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));
}
于 2014-03-18T11:59:29.933 に答える
1

日付をミリ秒の値に変換すると、日付をより簡単に比較できます。

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');
}
于 2012-07-05T14:26:10.027 に答える
1

次のコードを試して、年の差を取得してください...

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

幸運を!

于 2012-07-05T14:29:40.723 に答える
1

最初に、フォーマット文字列を使用して日付を解析するための JavaScript ライブラリを選択する必要があります(これにより、好みの形式で日付を指定できます)。この優れたライブラリを試してみてください(少なくとも、実装の詳細を気にする必要はありません。コンストラクターとメソッドは一致する必要がありますが、単純な日付をその形式で解析できることは必須ではありません)。DateDate.parse

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

次に、差を計算する必要がある場合:

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()直接使用できます。

于 2012-07-05T14:22:42.623 に答える
-2
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)
于 2012-07-05T14:16:32.883 に答える