Convertir cuerda a carbono

2 minutos de lectura

Estoy usando Laravel 5.1

Hace unos días usé protected $dates = ['license_expire'] en mi modelo para convertir la fecha de la cadena en instancias de Carbon. En HTML, el valor predeterminado en el formulario de creación para la fecha era Carbon\Carbon::now()->format('Y-m-d')

Para mostrar la alerta en la página de inicio, utilicé <p>Licence Expired: <b>{{ $employee->license_expire < Carbon\Carbon::now()?'License has expired':$employee->license_expire->diffForHumans() }}</b></p>

Hasta entonces, el método diffForHumans() funciona bien.

Pero en ese caso, el valor predeterminado del formulario de edición también era la fecha de hoy sin importar lo que hubiera en la base de datos (estoy usando un formulario parcial). Para resolverlo, cambio el valor predeterminado en HTML que era NUll. Y agregue otro método en mi modelo para mostrar la fecha actual en el formulario de creación.

public function getLicenseExpireAttribute($date)
{
    return Carbon::parse($date)->format('Y-m-d');
}

Después de eso, cuando voy a la página de inicio, tengo un FatalErrorException que dice Call to a member function diffForHumans() on string

Cuando compruebo la fecha con dd($employee->license_expire) vuelve a ser STRING.

¿Alguien puede decirme cómo puedo convertir la cadena a Carbon en esta situación?

o

¿Hacer que la fecha predeterminada de mi formulario de creación sea la fecha de hoy, la fecha del formulario de edición de la base de datos y puedo usar diffForHumans() para mostrar la alerta en la página de inicio?

avatar de usuario
Rwd

Casi estabas allí.

Remover protected $dates = ['license_expire']

y luego cambia tu LicenseExpire acceso a:

public function getLicenseExpireAttribute($date)
{
    return Carbon::parse($date);
}

De esta forma devolverá un Carbon ejemplo, pase lo que pase. Así que para tu formulario solo tendrías $employee->license_expire->format('Y-m-d') (o cualquier formato que se requiera) y diffForHumans() debería funcionar en su página de inicio también.

¡Espero que esto ayude!

  • ¡sí! Eso ayudo. Hice exactamente lo que dijiste. funciona perfectamente como deseo.

    – smartrahat

    14/09/2015 a las 14:54

¿Por qué no intentas usar lo siguiente?

$dateTimeString = $aDateString." ".$aTimeString;
$dueDateTime = Carbon::createFromFormat('Y-m-d H:i:s', $dateTimeString, 'Europe/London');   

$filtro[‘dateOfService’]=’06.2021′;

$d1 = Carbon::createFromFormat('m.Y', $filter['dateOfService'], 'Europe/Warsaw')->format('m.Y');

Prueba esto

$date = Carbon::parse(date_format($youttimestring,'d/m/Y H:i:s'));
echo $date;

¿Ha sido útil esta solución?