Javascript计算从今天到固定年龄的虚拟出生日期

时间:2014-03-17 06:21:01

标签: javascript

我有一个互动的故事,我需要根据这两个事实计算某人的出生年份:

  1. 这个角色是32岁
  2. 这个角色出生于5月20日
  3. 到目前为止,我正在使用以下内容确定日期:

    var currentDate = new Date()
    var day = currentDate.getDate()
    var month = currentDate.getMonth() + 1
    var year = currentDate.getFullYear();
    

    我可以用什么Javascript来确定出生年份需要保持上述事实才能保持正确?

    我希望这是有道理的,并提前感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

嗯,这样的事情:

var dateOfBirth;
if(month > 5 || (month === 5 && day > 20))
    dateOfBirth = (year - 32) + '/05/20';
else
    dateOfBirth = (year - 33) + '/05/20';

答案 1 :(得分:0)

  

1.这个角色是32岁   这个角色出生于5月20日。

javascript中的月份日期为零索引。我们的想法是根据年龄和今天的日期找出出生年份,然后设置月和日的值。

var ageInYears = 32;
var birthMonth = 'May';
var birthDay   = '20th';

var d = new Date();
var currentMonth = d.getMonth();
var currentDate  = d.getDate();
var months = {january:0, february:1, march:2, april:3, may:4, june:5, july:6,
              august:7, september:8, october:9, november:10, december:12};
var birthMonthNum = months[birthMonth.toLowerCase()];
var birthDate = parseInt(birthDay);
var birthYear = d.getFullYear() - ageInYears - (currentMonth > birthMonthNum || currentMonth == birthMonthNum && currentDay > birthDate? 0 : 1);

// 20 May 1981
var fictionalBirthDate = new Date(birthYear, birthMonthNum, parseInt(birthDay));

请注意, parseInt 需要修剪日期的序数部分,因此'20th' - > 20。也可以使用正则表达式,但是parseInt更加自我记录。

修改

似乎"现在"日期可以是您选择的任何日期,因此这是一个接受可选 ageDate 参数的函数,该参数是年龄为真的日期。如果没有提供日期,则使用当前日期。

// Calculate a birthdate given the age, birth month, birth date and ageDate on which
// the age is true. If no ageDate is provided, the current date is used.
function calcBirthYear(agetToTurn, birthMonth, birthDay, ageDate) {
    date = ageDate || new Date();
    var currentMonth = date.getMonth();
    var currentDate  = date.getDate();
    var months = {january:0, february:1, march:2, april:3, may:4, june:5, july:6,
                  august:7, september:8, october:9, november:10, december:11};
    var birthMonthNum = months[birthMonth.toLowerCase()];
    var birthDate = parseInt(birthDay);
    var birthYear = date.getFullYear() - agetToTurn - (currentMonth > birthMonthNum || currentMonth == birthMonthNum && currentDay >= birthDate? 0 : 1);

    return new Date(birthYear, birthMonthNum, parseInt(birthDay));
}

console.log(calcBirthYear(10, 'May', '20th', new Date(2032, 1, 1)));    // 20 May 2021
console.log(calcBirthYear(56, 'December', '4th'));                      //  4 Dec 1957
console.log(calcBirthYear(56, 'December', '4th', new Date(3014,2,17))); //  4 Dec 2957
console.log(calcBirthYear(57, 'June', '14th'));                         // 14 Jun 1956

该函数返回一个日期对象。如果只需要年份,则最后一行应为:

return birthYear;

答案 2 :(得分:0)

使用javascript Date算术:

var date = new Date();
date.setDate(20);
date.setMonth(4); // May = 4(0 based month index)
date.setYear(date.Year-(date > new Date())?32+1:32); 

现在date有你角色的确切出生日期。

date.getYear();

将为您提供所需的年份。