Problema trabalhando com datas

Ah! Sabia que tinha uma forma melhor de fazer ^^

Ric, seu código está muito legal, porém estou tendo problemas com campos datetime.

Tenho dois campos data/hora que, quando tento preencher, ficam com o valor 1969-12-31. Porém, utilizei o seu código com campos date e funciona perfeitamente.

Tem idéia do que pode estar errado?

protected function beforeSave(){


        foreach($this->tableSchema->columns as $columnName => $column){


                if ($column->dbType == 'date'){


                        $this->$columnName = date('Y-m-d', CDateTimeParser::parse($this->$columnName, Yii::app()->locale->dateFormat));


                }elseif ($column->dbType == 'datetime'){


                        $this->$columnName = date('Y-m-d H:i:s', CDateTimeParser::parse($this->$columnName, Yii::app()->locale->dateFormat));


                }





        }





        return true;


}

Abraços!!!

O motivo exato eu não sei mas creio que ele deve estar assumindo o horário zero, que no meridiano de greenwich é 1970-01-01 e como estamos a menos 3 horas de greenwich o horário zero aqui é 1969-12-31 21:00.

imprime o valor com as horas e confere se é isso.

Scoob, realmente está com problemas em datetime.

A parte do beforeSave em datetime deveria estar da seguinte maneira:


CDateTimeParser::parse($mydate, 

	strtr(Yii::app()->locale->dateTimeFormat, 

		array("{0}" => Yii::app()->locale->timeFormat,

			  "{1}" => Yii::app()->locale->dateFormat))));



Porém, acabo de notar algo que acho que é um bug no Yii!

A documentação do CDateTimeParser diz que o formato para horas é h ou hh (minusculo).

Porém, o formato no arquivo de locale está HH (em maiusculo).

O CDateFormatter SOMENTE reconhece a hora se for com o HH. u seja, temos aí uma incoerência. Não consigo alterar um sem afetar o outro. Vou relatar esta situação ao Qiang. Porém, ele é meio cabeça-dura e nao sei bem no que vai dar isso. Aguardem.

OK, muito obrigado a todos,

Ficamos então no aguardo, Ric,

Abraços!!!

:>)

É o seguinte: Alertei na seção "Bug Reports", e fui avisado que alguém já tinha reportado o mesmo problema, que foi corrigido apenas há dois dias atrás.

Como estamos em 31 de agosto, amnhã ou depois deve sair uma nova versão do Yii, então a aguardarei com a correção do CDateTimeParser e postarei o codigo completo para vcs.

Abraço!

beleza, Ric, obrigado!!

Abraços!

Extensão corrigida e atualizada:

i18n-datetime-behavior 1.1

Requer Yii 1.0.9

Desculpem a demora

Valeu mesmo, Ricardo!!!! Muito obrigado!! É uma gentileza sua que nos traz uma funcionalidade muito importante e que valeria a pena esperar o tempo que fosse necessário!!

:D

Abração!!

Olá, pessoal.

Estou tendo problemas com campos date também. Deixe-me explocar como andam as coisas por aqui:

Na tabela (mysql), tenho um campo DATE (dt_nascimento).

Criei usando o yiic o MODEL e o CRUD. Fiz umas brincadeiras com activeDropDownList para começar a melhorar os formularios.

Me deparei com um campo DATE. De cara, fui pro google e achei este topico. Adicionei o trecho de código (metodos beforeSave e afterFind) no arquivo do modelo da classe que possui o campo data de nascimento.

Com isto ele alterou a data para "Dec 31, 1969" (quando salvo qualquer data).

Tentei usar o i18n-datetime-behavior mas não sei se estou procedendo corretamente. Existe o arquivo br na pastinha do framework. Mas continua a mesma coisa…

Eu acredito que falta configurar o locale.

Em protected/config/main.php configure a propriedade ‘language’ para ‘pt-br’ e '‘sourceLanguage’ para ‘pt-br’ (nunca lembro qual das duas é, então altere as duas, rsrs)

Verifique na pasta yii/framework/i18n/data se há o arquivo pt_br.php. Se nao houver, crie a partir do arquivo pt.php.

Amigos,

Na minha tabela também tenho um campo date, mais quando clico para inserir, a data vai ‘0000-00-00’ estou usando o


<?php $this->widget('zii.widgets.jui.CJuiDatePicker', array(

                'model'=>$model,

                'name' => 'req_saidaprev',

                'options' => array(

                    'showAnim' => 'fold',                    

                ),

                'theme' => 'redmond',

                'value' => date('Y/m/d'),

                'language' => 'pt-BR',

                'htmlOptions' => array(

                    'size' => 10,

                ),

            ));



Alguem pode me informar porque está acontecendo este erro?

Agradeço a todos…

Adriano

Quais datas vc está tentando?

Galera, o lance das datas que são gravadas incorretamente é por causa do formato que é passado ao atributo do model no momento da gravação.

As datas devem respeitar o formato AAAA-mm-dd.

No caso do CJuiDatePicker, para integrar com o I18nBehavior, use o array "options", igual eu fiz aqui:

http://www.yiiplayground.cubedwater.com/index.php?r=UiModule/jui/ziiDatePicker

O ‘value’ deveria ser obtido do valor do atributo. Exemplo




'value' => $model->projectDateStart



E para exibir corretamente em pt_BR




  'options' => array(

	            'dateFormat'=>'dd/mm/yy',



Estou sem os códigos que utilizo aqui, mas assim que voltar pra casa disponibilizo a forma que estou usando aqui para ver se ajuda.

Abraços!

Aliado ao i18n deveria funcionar

Obrigado amigo…já conseguir desvendar o mistério. Agora estou querendo que todas as vezes que o usuário visualize a grid, ele a veja por ordem de nome por exemplo. Como fazer isto?

Agradeço a todos.

Adriano Silva

Adriano, no seu model você pode declarar o defaultScope, assim:




public function defaultScope(){

    return array(

        'order'=>'nome ASC',

    );

}



Isto vai ordenar não somente a grid, mas qualquer consulta que utilize o model por padrão.

Abraços!

Caro Júnior,

Muito obrigado novamente pela ajuda. Foi excelente.

Sds,

Adriano Silva

[font="Arial Black"][/font][size="2"][/size]Caros Amigos,

Em minha aplicação tenho duas tabelas, uma requisição outra atendimento, como fazer para que quando o campo KmInicial da tabela atendimento da tabela atendimento for digitado algo, automaticamente o campo Status da tabela requisição seja alterada para ‘EM ANDAMENTO’. E quando o campo KmFinal da tabela atendimento for diferente de NULL, o Status de requisição seja ‘CONLUIDO’. E também como comparar números inteiros, KmInicial não pode ser maior que KmFinal. Como posso fazer pra resolver esses enigmas?w

Agradeço a todos.

Adriano Silva

Junior,

Como faço pra clicar em um button na grid e automaticamente o id desta linha ir para outro campo em outra tabela.

Sds,

Adriano Silva

Dá um look aqui

http://www.yiiframework.com/wiki/106/using-cbuttoncolumn-to-customize-buttons-in-cgridview/

Abraços!!