【问题标题】:How to return the users age from their year of birth如何从出生年份返回用户年龄
【发布时间】:2018-12-19 09:43:38
【问题描述】:

这些是问题的标准;

  1. 以数字形式返回用户的年龄。
  2. 您可以假设传递的用户将始终具有“yearOfBirth”属性。

我的回答是;

function getUserAge (user) {
    const year = new Date().getFullYear()
    return year - user.yearOfBirth
}

我不确定为什么这不会返回用户年龄。有人有什么建议吗?

我的答案已经过测试

describe("getUserAge", () => {
    it("returns the age of the passed user based on its yearOfBirth property", () => {
        const currentYear = new Date().getFullYear();
        const user = {
            yearOfBirth: 1989
        };
        expect(getUserAge(user)).to.equal(currentYear - 1989);
    });
});

【问题讨论】:

  • 能补充一下函数的调用方式吗?如,minimal reproducible example?
  • 因为真正计算年龄需要日、月、年。
  • 不管计算的准确性如何,它都对我有用:jsfiddle.net/khrismuc/1uoc67hz 你到底得到了什么结果?
  • 我同意,这应该适用于给定的测试,即使计算不正确(因为测试也不能验证正确的年龄计算)。
  • 投票结束作为“为什么这段代码不起作用”的问题应该有足够的代码在问题中来演示问题。

标签: javascript date object


【解决方案1】:

您需要考虑用户今年是否过生日。对于 6 月出生的人,您当前的实现在 1 月和 12 月返回相同的值,但当然,12 月的值应该比 1 月的值高一个。

如果您的工作对象是yearOfBirth,则您无法准确返回他们的年龄。您还需要月份和日期。 (取决于你想变得多么迂腐,还有小时、分钟和秒;但大多数人并没有那么迂腐。)

【讨论】:

  • 这通常是正确的,但如果您正确计算年龄,测试将失败。
【解决方案2】:

您可以使用出生日期和现在的时间戳之间的差异。

var date_birth= new Date("2010/11/3");
var timestamp_birth= date_birth.getTime();
var now= Date.now();

var diffTimestamp= now - timestamp_birth;
  // ms to secend / second to minute / minute to hour / hour to days of year
console.log( diffTimestamp/1000/60/60/24/365 );

*如你所见,只知道年份是不够的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多