2012-06-03 83 views
4

是否有任何PHP函数可将当前年龄转换为格式为YYYY-MM-DD的日期。我存储在DOB在YYYY-MM-DD格式和我想要运行SQLite的查询:将年龄转换为当前日期

SELECT FirstName FROM mytable WHERE DOB >= $MinAge AND DOB <= '$MaxAge'; 

我搜索谷歌年龄转换为日期格式,但找不到任何功能,是有任何人谁可以帮忙吗?

+2

认为,通过,你怎么能转换'32年到“1980年4月23日不知道出生年月日的一天? – davidaam

回答

5

是否有任何PHP函数现在的年龄转换为日期

没有,年龄比包含日期的信息较少。一个人有三千六十六岁的可能性是X岁,但出生日期恰好映射到一个年龄段。

换句话说,如果我告诉你我20岁,并要求你告诉我我的生日,那么你不能确定。但是,如果我告诉你我的生日,那么你可以肯定地告诉我我的年龄。

由于您的专栏名为DOB,因此我假定您存储了出生日期,而不是年龄。在这种情况下,有可能获取特定年龄段的用户。


我们假设您想要查找年龄在18岁到50岁之间(包括18岁和50岁)的所有用户。

对于用户是今天18,他的生日必须是:today - 18 years

  • 之前或之后在

    • today - 19 years

    对于用户是今天50时,他的生日一定要:

    • 之前或之后today - 50 years
    • today - 51 years

    注意, “之前或者在” 和 “后” 仅仅 “< =” 和 “>” 表示。

    那么,如果你想要所有18到50岁之间的用户呢?

    你可以只取两个外部界限:

    用户的年龄是18和50之间IFF:
    dob <= (today -18 years) and dob > (today - 51 years)

    $lower = date('Y-m-d', strtotime('today -18 years')); 
    $upper = date('Y-m-d', strtotime('today -51 years')); 
    $query = "SELECT FirstName FROM users WHERE dob >= '$lower' AND dob < '$upper';"; 
    

    请注意,如果您之前1970年(52十岁上下的计划日期),你应该使用DateTime而不是日期和sttrtotime(我实际上只在实际代码中使用DateTime,但date/strtotime使得更简单的例子)。

    以日期时间为85年前的一个例子:

    $d = new DateTime('today -85 years'); 
    $s = $d->format('Y-m-d'); //1927-06-03 as of 3 June 2012 
    
  • +0

    高度赞赏,我会在早上尝试一下这段代码。 –

    +0

    还有一件事我该如何将变量添加到-85,如 $ d = new DateTime('today - $ MIN years'); 我得到错误 - $ MIN –

    +0

    @SaudIqbal使用双引号。变量不会插入到单引号中。 (另外,感谢双编辑欺骗。意外覆盖你的编辑:p) – Corbin

    相关问题