【问题标题】:How to calculate age from DOB if month is invalid?如果月份无效,如何从 DOB 计算年龄?
【发布时间】:2019-02-13 12:56:52
【问题描述】:

我有一个日期字段,如果 monthunknown,则该字段接受。我根据输入的日期和当前的日期和时间计算age

var birthDate = new Date("12 UNK 1995");
var now = new Date();
var age = now.getFullYear() - birthDate.getFullYear();

document.write("Your Age is: " + age);

如果运行这会引发 NaN 错误。我认为是因为日期格式无效。

我有什么方法可以计算age,即使 monthunknown 基于 year 仅以任何形式日期格式?

【问题讨论】:

  • 日期字符串的来源是什么?如果它不是有效的格式,则需要对其进行解析。当然,当月份未知时,准确性会丢失
  • 是的,如果解析表明它的格式无效。
  • 我的意思是你需要把那个字符串分解成它的部分并且只使用有效的部分。不需要使用new Date
  • 你是在问如何解析Strings 的模式"DD UNK YYYY",还是你真的在问“任何类型的日期格式”?前者我们可以回答,后者是不可能的。
  • @MaxVollmer 我正在询问如何解析模式“DD UNK YYYY”

标签: javascript c# regex typescript datetime


【解决方案1】:

如果月份未知,则以编程方式将其设置为年中的正常方式 - 到 7 月。我知道印度的这个问题——有些人有时不知道自己的出生日期。

例如如下:

var month = "UNK"; // TODO: here is your code to get the month name from field

month = month == "UNK" ? "JUL" : month;

var birthDate = new Date("12 " + month + " 1995");
var now = new Date();
var age = now.getFullYear() - birthDate.getFullYear();

document.write("Your Age is: " + age);

但请注意,您的计算并不真正正确,因为您没有使用完整日期(日、月、年、小时、分钟)进行计算。

我的建议

但我建议使用新的 HTML5 输入字段类型 date(请参阅此链接),如下所示(将鼠标指针移到此字段上):

<input name="birthdate" type="date" required>

所有用户都必须自行承担责任。在这种情况下,他们必须选择一个日期,而您对此没有责任。

【讨论】:

    【解决方案2】:

    你的年份已经在一个字符串中,所以从字符串中提取它,然后从现在减去年份。

    【讨论】:

    • 您可以通过正则表达式搜索来做到这一点:var year = Number('12 UNK 1995'.match(/\d{4}/g)[0]);
    • 年份在最后 4 个字符中的保证是什么?
    • 这将在字符串的任何位置拾取一组 4 个连续数字的第一个实例。尝试几个不同的样本。
    • 请将我的答案标记为对您有帮助的答案。
    • @Hari Krishna,这是第一场比赛(这就是正则表达式的工作方式)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多