【问题标题】:How to calculate age in years based on Date of Birth in different calendar?如何根据不同日历中的出生日期计算年龄?
【发布时间】:2016-01-28 00:43:00
【问题描述】:

我在数据库表中有两个名字:

  • 死亡日期
  • birth_date

我已经根据sql表中这两个名字的值设置了生日计算,代码如下:

$sql .= "FLOOR((TO_DAYS(GREATEST(IF(decease_date='0000-00-00',CURRENT_DATE,decease_date),IFNULL(decease_date,CURRENT_DATE))) - TO_DAYS(birth_date)) / 365) AS age";

我已经通过jDateTime 方法将 localDate 设置为另一个日历,即波斯日历:

代码如下:

public static function localDate($date = "")
  {$local = "";
date_default_timezone_set('Asia/Tehran');
switch (strlen($date))
{default: // Ymd
      {
      if (( $date < '19700101'))
      {
     $local = $date;
     break;
      }
      else
      {
        header('Content-Type: text/html; charset=UTF-8');
        require_once dirname(__FILE__) . '/jdatetime.class.php';
        $local = jDateTime::date("l j F Y", strtotime($date), true, true, 'Asia/Tehran');
        break;}
    }
    break;}
return $local;}

问题是sql中的CURRENT_DATE,它将根据公历而不是波斯历中的CURRENT_DATE计算当前日期。

这就是为什么当我们在公历和波斯历中设置生日时,我的代码将根据公历计算患者年龄

这是两个不同日历日期的计算示例:

问:如何在基于波斯历的 SQL 中设置当前日期?

提前致谢。

【问题讨论】:

    标签: php sql sql-server date select


    【解决方案1】:

    您可以在 SQL 中使用 CURRENT_DATE,而不是使用

    $persian_current_date = jDateTime::date("Y-m-d", false, true, true, 'Asia/Tehran');
    $sql .= "FLOOR((TO_DAYS(GREATEST(IF(decease_date='0000-00-00','$persian_current_date',decease_date),IFNULL(decease_date,'$persian_current_date)))) - TO_DAYS(birth_date)) / 365) AS age";
    

    更好的是,只需选择此人的生日和去世日期,然后在 PHP 中进行计算,这允许您使用除 DAYS / 365 之外的计算年龄的方法(不能考虑闰年)。

    【讨论】:

    • 我试过你的方法,我得到错误:无法执行查询。
    猜你喜欢
    • 2013-10-31
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多