如何使用Zend_Date對象計算從出生日期開始的年齡?如何使用Zend_Date對象計算從日期開始的年齡
回答
這裏是另外一種方式來計算年齡。它使用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--;
}
感謝@maciej-homziuk用於指出以前的答案的閏年限制。我已經更新了這個答案,爲閏年的朱利安日添加了調整。
這是一類設計來計算的Zend日期年齡(見第1篇回覆): http://forums.zend.com/viewtopic.php?f=69&t=6932
它確實不行。 –
@Aegidius你明白了嗎? – Boz
這個職位:how to calculate a difference between two Zend_Date objects, in months
如果我正確地閱讀文檔,有一個爲越來越差沒有實現的功能在兩個日期之間以秒/分鐘/.../月/年計算,所以您需要自己計算它。像這樣的東西會做(如果說不上它需要閏年,DST和這樣的考慮):
<?php
$birth = new Zend_Date('1988-25-06');
$today = new Zend_Date();
$diff = $today->sub($birth)->toValue();
$age = floor($diff/3600/24/365);
我會試試看。謝謝:) –
_toValue_方法是否返回秒數? [documentation](http://framework.zend.com/apidoc/1.11/_Date.html#%5CZend_Date::toValue())僅表示它返回對象的整數表示形式。 –
是的,它是unix時間戳 – yokoloko
這是注意做這件事的方式Zend_Date的運算,但似乎很好地工作:
$birthdate = "1975-04-14";<br />
$age = floor((time() - strtotime($birthdate))/31556926);
echo "You are " . $age . " years old today.";
這是考慮閏年嗎? – Alex
你能解釋一下你的代碼嗎? –
$today = new Zend_Date();
$dateOfBirth = new Zend_Date('1988-25-06');
$age = $today->toString('Y') - $dateOfBirth->toString('Y');
if ($today->toString('dd') + $today->toString('MM') * 32 <
$dateOfBirth->toString('dd') + $dateOfBirth->toString('MM') * 32)
$age--;
漂亮的代碼。它有什麼作用? – 2011-11-14 23:24:43
上一個例子「$ today-> toString('z')<$ dateOfBirth-> toString('z')」有錯誤,其中'z'是時區。'MM'是月份,'dd'是日,我們需要檢查今年是否已經慶祝生日:「未慶祝」=(M
如果這是對先前答案的更正,它應該是對該答案的評論而不是新答案。同時建議始終解釋您的代碼。 –
我喜歡brady.vitrano的方法非常多,它也是建立我自己的動作助手計算基地但是他的代碼不考慮閏年(如果出生日期是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 = 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--;
}
我再次使用'$ today = new Zend_Date('2012-03-08')檢查了我的答案; $ dateOfBirth = new Zend_Date('1979-03-09');'它返回32就像你說的那樣。但是,我確實發現今天2月29日和3月1日出現問題。您的服務器date.timezone設置是什麼? –
謝謝你指出。我更新了閏年修正的答案。 –
我建議您使用此功能:
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;
}
在ZF1中,這'Tuffle_Date :: getDBFormat()'給出了致命的錯誤,所以我刪除了這個,現在它工作正常。 –
- 1. PHP:從年齡開始計算生日
- 2. 如何從日期計算年齡
- 3. MYSQL:計算年齡從2年開始
- 4. 從powerquery中的日期字段計算年齡和年齡桶
- 5. 從「日期」計算年齡HTML元素
- 6. 從出生日期計算年齡
- 7. 從SAS年齡計算出生日期
- 8. 從兩個日期計算年齡vb.net
- 9. 根據開始日期月份計算出年齡
- 10. 從出生日期(使用日曆)計算年齡IN Jsf
- 11. 從開始日期開始計算每年的節假日然後每年
- 12. 根據出生日期計算年齡
- 13. 日期選擇單位計算年齡
- 14. 從出生日期計算確切年齡(使用1/2)
- 15. 計算人年減去開始日期從結束日期
- 16. SQLite:如何從出生日期計算年齡
- 17. 如何從clojure出生日期計算年齡?
- 18. 如何計算年齡/年數兩個日期
- 19. SQL - 從出生年份開始計算年齡
- 20. 計算從生日xslt的年齡
- 21. 如何計算從出生日期到當前日期的當前年齡?
- 22. python中的年齡計算器從日期(mm/dd/yyyy)和打印年齡僅
- 23. 如何在PHP中使用年,月,日計算年齡?
- 24. 從輸入和日期對象中計算出一個人的年齡
- 25. 計算週年開始日期的假期年份
- 26. 按年齡分組按年齡計算從出生日期SQL Server
- 27. 使用javascript計算特定年齡段的出生日期
- 28. 計算年齡
- 29. 年齡計算
- 30. 計算年齡
'Zend_Date :: setOptions'字符串使得代碼對我無法使用 - 它在調用age函數後廢除了所有的日期格式。 – yentsun
@yentsun那是因爲它在執行代碼之前更改了默認選項。你可以改變它,一旦你有日期Zend_Date :: setOptions(array('format_type'=>'iso')) –
是啊,我已經在我的代碼已經修復了。我雖然可以在你的回答中提到它。 – yentsun