如何根据不同日历中的出生日期计算年龄?

时间:2015-10-28 09:48:20

标签: php sql sql-server date select

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

  • decease_date
  • 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;}

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

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

这是两个不同日历日期的计算样本:

enter image description here

  

问:如何根据波斯日历在SQL中设置当前日期?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以执行

,而不是在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以外年龄的方法(无法计算闰年)。