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