Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用Zend_日期计算从日期算起的年龄_Php_Date_Zend Framework - Fatal编程技术网

Php 如何使用Zend_日期计算从日期算起的年龄

Php 如何使用Zend_日期计算从日期算起的年龄,php,date,zend-framework,Php,Date,Zend Framework,如何使用Zend_date对象从出生日期计算年龄?这里有一个类,用于从Zend date计算年龄(请参见第1个回复): 这里有一个类,用于计算从zend date算起的年龄(请参见第1个回复): 从这篇文章: 如果我正确阅读了文档,就没有实现以秒/分钟/月/年为单位计算两个日期之间差异的功能,因此您需要自己计算。这样做可以(不知道是否考虑闰年、DST等因素): 来自此帖子: 如果我正确阅读了文档,就没有实现以秒/分钟/月/年为单位计算两个日期之间差异的功能,因此您需要自己计算。这样做可以(不知道

如何使用Zend_date对象从出生日期计算年龄?

这里有一个类,用于从Zend date计算年龄(请参见第1个回复):
这里有一个类,用于计算从zend date算起的年龄(请参见第1个回复):

从这篇文章:

如果我正确阅读了文档,就没有实现以秒/分钟/月/年为单位计算两个日期之间差异的功能,因此您需要自己计算。这样做可以(不知道是否考虑闰年、DST等因素):

来自此帖子:

如果我正确阅读了文档,就没有实现以秒/分钟/月/年为单位计算两个日期之间差异的功能,因此您需要自己计算。这样做可以(不知道是否考虑闰年、DST等因素):


这里是另一种计算年龄的方法。它使用PHP格式。它只需减去年份,然后检查今年的生日是否已过。使用标准PHP函数也可以很容易地做到这一点,但我决定按照您的要求使用Zend_Date

更新的答案

    Zend_Date::setOptions(array(
        'format_type' => 'php'
    ));
    $today           = new Zend_Date();
    $dateOfBirth     = new Zend_Date('1979-04-10', 'Y-m-d');

    $age             = $today->toString('Y') - $dateOfBirth->toString('Y');
    // Edit: Added julian date adjustments for leap years
    $adjustJulian    = strcmp($today->toString('L'), $dateOfBirth->toString('L'));
    if ($dateOfBirth->toString('m') > 2) {
        $dateOfBirth->addDay($adjustJulian);
    }

    if ($today->toString('z') < $dateOfBirth->toString('z')) {
        $age--;
    }
Zend_日期::设置选项(数组)( '格式\类型'=>'php' )); $today=新的Zend_日期(); $dateOfBirth=新Zend_日期('1979-04-10','Y-m-d'); $age=$today->toString('Y')-$dateOfBirth->toString('Y'); //编辑:添加了闰年的朱利安日期调整 $adjulian=strcmp($today->toString('L'),$dateOfBirth->toString('L'); 如果($dateOfBirth->toString('m')>2){ $dateOfBirth->addDay($julian); } 如果($today->toString('z')<$dateOfBirth->toString('z')){ $age--; }

感谢您指出了前面答案的闰年限制。我更新了这个答案,为闰年的朱利安日添加了调整。

这里是计算年龄的另一种方法。它使用PHP格式。它只需减去年份,然后检查今年的生日是否已过。使用标准PHP函数也可以很容易地做到这一点,但我决定按照您的要求使用Zend_Date

更新的答案

    Zend_Date::setOptions(array(
        'format_type' => 'php'
    ));
    $today           = new Zend_Date();
    $dateOfBirth     = new Zend_Date('1979-04-10', 'Y-m-d');

    $age             = $today->toString('Y') - $dateOfBirth->toString('Y');
    // Edit: Added julian date adjustments for leap years
    $adjustJulian    = strcmp($today->toString('L'), $dateOfBirth->toString('L'));
    if ($dateOfBirth->toString('m') > 2) {
        $dateOfBirth->addDay($adjustJulian);
    }

    if ($today->toString('z') < $dateOfBirth->toString('z')) {
        $age--;
    }
Zend_日期::设置选项(数组)( '格式\类型'=>'php' )); $today=新的Zend_日期(); $dateOfBirth=新Zend_日期('1979-04-10','Y-m-d'); $age=$today->toString('Y')-$dateOfBirth->toString('Y'); //编辑:添加了闰年的朱利安日期调整 $adjulian=strcmp($today->toString('L'),$dateOfBirth->toString('L'); 如果($dateOfBirth->toString('m')>2){ $dateOfBirth->addDay($julian); } 如果($today->toString('z')<$dateOfBirth->toString('z')){ $age--; }

感谢您指出了前面答案的闰年限制。我已经更新了这个答案,为闰年的儒略日添加了调整。

这是Zend_Date的做法,但似乎效果不错:

$birthdate = "1975-04-14";<br />
$age = floor((time() - strtotime($birthdate)) / 31556926);

echo "You are " . $age . " years old today.";
$birthdate=“1975-04-14”
$age=floor((time()-strotime($birthdate))/31556926); 呼应“你是”$年龄“我今天岁了。”;
这是Zend_Date的做法,但似乎效果不错:

$birthdate = "1975-04-14";<br />
$age = floor((time() - strtotime($birthdate)) / 31556926);

echo "You are " . $age . " years old today.";
$birthdate=“1975-04-14”
$age=floor((time()-strotime($birthdate))/31556926); 呼应“你是”$年龄“我今天岁了。”;
$today=new Zend_Date();
$dateOfBirth=新Zend_日期('1988-25-06');
$age=$today->toString('Y')-$dateOfBirth->toString('Y');
如果($today->toString('dd')+$today->toString('MM')*32<
$dateOfBirth->toString('dd')+$dateOfBirth->toString('MM')*32)
$age--;
$today=new Zend_Date();
$dateOfBirth=新Zend_日期('1988-25-06');
$age=$today->toString('Y')-$dateOfBirth->toString('Y');
如果($today->toString('dd')+$today->toString('MM')*32<
$dateOfBirth->toString('dd')+$dateOfBirth->toString('MM')*32)
$age--;

我非常喜欢布雷迪。维特拉诺的方法,也是我自己构建动作助手计算年龄的基础,但是他的代码没有考虑闰年(例如,如果出生日期是1979-03-09[普通年],今天是2012-03-08[闰年],他的方法返回33,尽管实际年龄是32岁)-这就是当涉及闰年时,必须延长它以返回正确年龄的方式:

Zend_Date::setOptions(array(
    'format_type' => 'php'
));

$today = new Zend_Date();
$dateOfBirth = new Zend_Date($date);

/*** Considering the leap years if the birth date is on 1st march or later. ***/
if ($dateOfBirth->toString('n') > 2) {
    $birthLeap = $dateOfBirth->toString('L');
    $todayLeap = $today->toString('L');
}

$age = $today->toString('Y') - $dateOfBirth->toString('Y');

if ($today->toString('z') - $todayLeap < $dateOfBirth->toString('z') - $birthLeap) {
    $age--;
}
Zend_日期::设置选项(数组)( '格式\类型'=>'php' )); $today=新的Zend_日期(); $dateOfBirth=新Zend_日期($Date); /***如果出生日期为3月1日或更晚,则考虑闰年***/ 如果($dateOfBirth->toString('n')>2){ $birthreap=$dateOfBirth->toString('L'); $todayLeap=$today->toString('L'); } $age=$today->toString('Y')-$dateOfBirth->toString('Y'); 如果($today->toString('z')-$todayLeap<$dateOfBirth->toString('z')-$birthLeap){ $age--; } 如果您想使用Zend的默认日期说明符(而不是PHP的日期说明符),那么下面就是代码:

$today=new Zend_Date();
$dateOfBirth=新Zend_日期($Date);
/***如果出生日期为3月1日或更晚,则考虑闰年***/
如果($dateOfBirth->get('M')>2){
/***检查出生年份是否为闰年***/
if($dateOfBirth->get(Zend_Date::LEAPYEAR)){
$birthLeap=1;
}
/***检查今天的年份是否是闰年***/
如果($today->get(Zend_Date::LEAPYEAR)){
$todayLeap=1;
}
}
$age=$today->get('Y')-$dateOfBirth->get('Y');
如果($today->get('D')-$todayLeap<$dateOfBirth->get('D')-$birthLeap){
$age--;
}

我非常喜欢布雷迪。维特拉诺的方法,也是我自己构建动作助手的基础,以年为单位计算年龄,但是他的代码没有考虑闰年(例如,如果出生日期是1979-03-09[普通年],今天是2012-03-08[闰年],他的方法返回33,尽管实际年龄是32岁)-这就是为什么
$today = new Zend_Date();
$dateOfBirth = new Zend_Date($date);

/*** Considering the leap years if the birth date is on 1st march or later. ***/
if ($dateOfBirth->get('M') > 2) {
    /*** Checking if the birth's year is a leap year. ***/
    if ($dateOfBirth->get(Zend_Date::LEAPYEAR)) {
        $birthLeap = 1;
    }

    /*** Checking if today's year is a leap year. ***/
    if ($today->get(Zend_Date::LEAPYEAR)) {
        $todayLeap = 1;
    }
}

$age = $today->get('Y') - $dateOfBirth->get('Y');

if ($today->get('D') - $todayLeap < $dateOfBirth->get('D') - $birthLeap) {
    $age--;
}
public function getAge($dob)
{
    $today = new Zend_Date();
    $dob   = new Zend_Date($dob, Tuffle_Date::getDBFormat());

    $y = Zend_Date::YEAR;
    $m = Zend_Date::MONTH;
    $d = Zend_Date::DAY;

    $dobCurrentYear = new Zend_Date($today->get($y) . '-' . $dob->get($m) . '-' . $dob->get($d), Tuffle_Date::getDBFormat());
    $dobCurrentYear->setYear($today->get('Y'));

    $age = $today->get($y) - $dob->get($y);

    if (!$dobCurrentYear->isLater($today)) {
        $age--;
    }

    return $age;
}