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

Javascript从今天的日期和固定年龄计算虚构的出生日期,javascript,Javascript,我有一个互动故事,我需要根据以下两个事实计算某人的出生年份: 这个角色32岁 这个角色出生于5月20日 到目前为止,我使用以下方法确定日期: var currentDate = new Date() var day = currentDate.getDate() var month = currentDate.getMonth() + 1 var year = currentDate.getFullYear(); 然后,我可以使用什么Javascript来计算出生年份才能保持上述事实的真实性

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

  • 这个角色32岁
  • 这个角色出生于5月20日
  • 到目前为止,我使用以下方法确定日期:

    var currentDate = new Date()
    var day = currentDate.getDate()
    var month = currentDate.getMonth() + 1
    var year = currentDate.getFullYear();
    
    然后,我可以使用什么Javascript来计算出生年份才能保持上述事实的真实性


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

    嗯,类似这样的:

    var dateOfBirth;
    if(month > 5 || (month === 5 && day > 20))
        dateOfBirth = (year - 32) + '/05/20';
    else
        dateOfBirth = (year - 33) + '/05/20';
    
    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来修剪日期的顺序部分,因此
    '20'
    ->
    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;
    

    使用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();
    

    将为您提供所需年份。

    您想根据年龄(从当前日期)查找出生日期吗?谢谢,这返回了错误的结果(似乎是一年),因此我们同意下面的建议。谢谢你的帮助。我很抱歉,是我离开了一年!只需做一次更改(第20天>=第20天),即可完美运行。谢谢你@kamilkpI无法让他工作。。。谢谢您的评论,请告知。您遇到了什么问题?--我刚刚得到了完整的系统日期,但我认为这是我的错误,我对javascript非常陌生,我想我可能把错误的变量传递给了播放器。不管怎样,我现在通过使用另一个建议的答案来实现这一点,谢谢你的帮助。我真的很感激。谢谢罗布,我没能得到这份工作,展望未来的岁月,它一直在破碎。感谢您的建议。如果您希望初始日期不是当前日期,这很容易适应,但从OP上看不清楚。