Função para Calcular Idade ...
MO
Função para Calcular Idade  
 
  1. <?php
  2. Pessoal uma ajuda estou criando uma função para calcular a idade, porém surgiu um erro que não estou conseguindo desvendar, o erro:
  3. Warning: strtotime() expects parameter 1 to be string, object given in C:\Vertrigo\www\teste\app\lib\widget\Funcoes.class.php on line 62
  4. Fatal error: Uncaught TypeError: Argument 1 passed to Adianti\Widget\Form\TEntry::setExitAction() must be an instance of Adianti\Control\TAction, integer given, called in C:\Vertrigo\www\teste\app\control\apresentacao\Formfuncaocalculaidade.class.php on line 90 and defined in C:\Vertrigo\www\teste\lib\adianti\widget\form\TEntry.php:201
  5. Stack trace:
  6. #0 C:\Vertrigo\www\teste\app\control\apresentacao\Formfuncaocalculaidade.class.php(90): Adianti\Widget\Form\TEntry->setExitAction(50)
  7. #1 C:\Vertrigo\www\teste\lib\adianti\core\AdiantiCoreApplication.php(80): Formfuncaocalculaidade->__construct(Array)
  8. #2 C:\Vertrigo\www\teste\engine.php(15): Adianti\Core\AdiantiCoreApplication::run('1')
  9. #3 C:\Vertrigo\www\teste\engine.php(20): TApplication::run()
  10. #4 {main}
  11. thrown in C:\Vertrigo\www\teste\lib\adianti\widget\form\TEntry.php on line 201
  12. os Códigos:
 
  1. <?php
  2. /**
  3. * FamiliarCompletoDataGridView Form List
  4. * @author <your name here>
  5. */
  6. class Formfuncaocalculaidade extends TPage
  7. {
  8. protected $form; // form
  9. protected $datagrid; // datagrid
  10. protected $pageNavigation;
  11. protected $loaded;
  12. private static $formName = 'form_CompFam';
  13. /**
  14. * Form constructor
  15. * @param $param Request
  16. */
  17. public function __construct( $param )
  18. {
  19. parent::__construct();
  20. // creates the form
  21. $this->form = new TQuickForm('form_CompFam');
  22. $this->form->class = 'tform'; // change CSS class
  23. $this->form->style = 'display: table;width:100%'; // change style
  24. $this->form->setFormTitle('Cadastro dos Familiáres');
  25. //criando notebook
  26. $this->notebook = new BootstrapNotebookWrapper( new TNotebook(900,500) );
  27. //$this->notebook = new TNotebook(900,500);
  28. //adicionando o notebook dentro do form
  29. $this->form->add($this->notebook);
  30. //criando uma tabela
  31. $table = new TTable();
  32. //criando um panel
  33. $panel = new TPanel(1000,240);
  34. //adicionando o panel a tabela
  35. $table->addRowSet($panel);
  36. //adicionando duas páginas ao notebook
  37. $this->notebook->appendPage('Dados dos Familiares', $table);
  38. $cod_compfam = new TEntry('cod_compfam');
  39. $compf_nome = new TEntry('compf_nome');
  40. $compf_cpf = new TEntry('compf_cpf');
  41. $compf_datnasc = new TDate('compf_datnasc');
  42. $compf_Idade = new TSpinner('compf_Idade');
  43. //formatando os campos de valor Beneficio e renda
  44. $compf_cpf->setMask('999.999.999-99');
  45. $compf_datnasc->setMask('dd/mm/yyyy');
  46. //Desabilitando o Código
  47. $cod_compfam->setEditable(False);
  48. // definindo o tamanho dos campos
  49. $cod_compfam->setSize(80);
  50. $compf_nome -> setSize(290);
  51. $compf_cpf -> setSize(100);
  52. $compf_datnasc -> setSize(100);
  53. $compf_Idade -> setSize(55);
  54. //formatação dos campos
  55. $compf_Idade->setRange(0,120,1);
  56. //validando campos
  57. $compf_nome->addValidation('compf_nome', new TRequiredValidator);
  58. //adicionando os Labels no Panel
  59. $panel->put(new TLabel('Cd.Titular'), 10, 16);
  60. $panel->put(new TLabel('Nome'), 84, 16);
  61. $panel->put(new TLabel('C.P.F'), 380, 16);
  62. $panel->put(new TLabel('Dat.Nasc.'), 490, 16);
  63. $panel->put(new TLabel('Idade'), 630, 16); // 1a Linha
  64. ## inserindo campos na pagina 2
  65. $panel->put($compf_nome, 92, 35);
  66. $panel->put($compf_cpf, 390, 35);
  67. $panel->put($compf_datnasc, 500, 35);
  68. $panel->put($compf_Idade, 630, 35); // 1a Linha
  69. $compf_Idade = Funcoes::onCalcidade($compf_datnasc);
  70. $compf_datnasc->setExitAction($compf_Idade);
  71. $this->form->setFields(array($cod_compfam, $compf_nome, $compf_cpf, $compf_datnasc, $compf_Idade));
  72. parent::add($this->form);
  73. }
  74. }
 
  1. <?php
  2. /**
  3. * Funcoes.class [ HELPER ]
  4. * Classe para incluir funções!
  5. */
  6. class Funcoes
  7. {
  8. /*
  9. * Calcula idade
  10. */
  11. public static function onCalcidade($param){
  12. /*
  13. * private static $formName = 'nome_do_formulario';
  14. */
  15. //print_r($param);
  16. try
  17. {
  18. return intval(substr(date('Ymd') - date('Ymd', strtotime($param)), 0, -4)); }
  19. catch (Exception $e){
  20. new TMessage('error', $e->getMessage());
  21. }
  22. }
  23. }
  24. ?>



?>

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (3)


MC

Marcos Boas;
O erro ta dizendo que o paramentro 1 da strtotime() seje uma sting;

de um var_dump($param); para ver o que esta chegando.

Mas se quizer tenho uma função que utilizo para calcular datas, vc pode molda-la como vc quizer:

 
  1. <?php
  2. /**-------------------------------------------------------------------------
  3. * Função CalData()
  4. * Escopo - Retorna a Diferença entre duas Datas
  5. * Parametros - $data1 = Data a ser comparada.
  6. * $data2 = Data a ser comparada.
  7. * $absolute = O intervalo deve ser forçado como positivo?
  8. * Retorno - array
  9. * obs - Invert = Representa um Periodo de Tempo (0)Positivo (1)Negativo
  10. *
  11. * @author MarcoARCampos
  12. */
  13. public static function CalData( $data1, $data2 = null, $absolute = false )
  14. {
  15. $dDt1 = new DateTime((( !$data1 ) ? date('Y-m-d') : $data1 ));
  16. $dDt2 = new DateTime((( !$data2 ) ? date('Y-m-d') : $data2 ));
  17. $diff = $dDt1->diff( $dDt2, $absolute );
  18. $Result['Ano'] = $diff->y;
  19. $Result['AnoDes'] = (( $diff->y > 1 ) ? 'Anos' : 'Ano');
  20. $Result['Mes'] = $diff->m;
  21. $Result['MesDes'] = (( $diff->m > 1 ) ? 'Meses' : 'Mes');
  22. $Result['Dia'] = $diff->d;
  23. $Result['DiaDes'] = (( $diff->d > 1 ) ? 'Dias' : 'Dia');
  24. $Result['Hor'] = $diff->h;
  25. $Result['HorDes'] = (( $diff->y > 1 ) ? 'Horas' : 'Hora');
  26. $Result['Min'] = $diff->i;
  27. $Result['MinDes'] = (( $diff->y > 1 ) ? 'Minutos' : 'Minuto');
  28. $Result['Seg'] = $diff->s;
  29. $Result['SegDes'] = (( $diff->y > 1 ) ? 'Segundos' : 'Segundo');
  30. $Result['TDias'] = $diff->days;
  31. $Result['TDiaDes'] = (( $diff->days > 1 ) ? 'Dias' : 'Dia');
  32. $Result['Invert'] = $diff->invert;
  33. return $Result;
  34. }
  35. ?>
JC

Saudações

Para ter noção esta função converte para idade atual no datagrid

 
  1. <?php
  2. public static function calcIdade($valor, $objeto, $row)
  3. {
  4. $data1 = new DateTime($valor);
  5. // segunda data
  6. $data2 = new DateTime (date('Y-m-d'));
  7. // diferença
  8. $diferenca = $data1->diff($data2);
  9. // resultado
  10. return $diferenca->format('%y');
  11. }
  12. ?>

MO

Galera muito obrigado pela ajuda verifiquei que não estava tratando corretamente o campo data.