Renderizando datas como objetos de carbono no Laravel

Trabalhar com datas em qualquer idioma pode ser difícil. PHP não é diferente. Embora a DateTimeclasse tenha muitas funcionalidades incorporadas, ainda deixa alguns recursos a desejar. Felizmente, Brian Nesbitt criou a classe Carbon . Esta é uma extensão da DateTimeclasse básica do PHP .

O Laravel usa esta classe Carbon em seu framework. Por padrão, os carimbos de data / hora que são adicionados automaticamente a qualquer tabela que você criar são recuperados do banco de dados como objetos Carbon. No entanto, e se você tiver outra datecoluna lá e quiser que ela seja retornada como um objeto Carbon também.

Depois de algumas pesquisas, descobri que o modelo básico do Eloquent tem um método para controlar quais datas são retornadas como objetos Carbon. O método está abaixo.

// vendor/laravel/framework/src/illuminate/Database/Eloquent/Model.php

/**
* Get the attributes that should be converted to dates.

*

* @return array

*/

public function getDates()
{
return array(static::CREATED_AT, static::UPDATED_AT, static::DELETED_AT);
}

Isso significa que você pode sobrescrever esse método em suas classes de modelo e definir quais datas são retornadas como objetos Carbon. Se você deseja apenas adicionar uma coluna de data a este método, implemente-o de forma semelhante ao código abaixo.

/**
* Get the attributes that should be converted to dates.

*

* @return array

*/

public function getDates()
{
return array_merge(parent::getDates(), array('purchase_date'));
}

Agora, sempre que você recuperar o purchase_datedo banco de dados, poderá usar os métodos incríveis que vêm com o objeto Carbon. Essa foi fácil!

Atualização (26 de setembro de 2013)

Em 6 de setembro de 2013, Taylor incorporou alguns códigos ao framework do Laravel, o que torna o trabalho com datas ainda mais fácil! Em vez de substituir a getDates()função, qualquer propriedade de data extra agora pode ser adicionada a um $datesarray no modelo do Eloquent. Essas propriedades de data serão transformadas automaticamente em objetos Carbon. Aqui está um exemplo: </p>

class User extends Eloquent {

protected $dates = array('purchase_date');

}

Agora a data_de_compra será um objeto Carbon, que pode então ser manipulado facilmente!