2015-09-13 16 views
16

Używam laravel 5.1Konwersja String do węgla

Kilka dni temu użyłem protected $dates = ['license_expire'] w moim modelu przekonwertować datę ciąg do instancji węgla. W HTML wartość domyślna w tworzenie forma na dzień było Carbon\Carbon::now()->format('Y-m-d')

w celu pokazania alert na stronie głównej użyłem <p>Licence Expired: <b>{{ $employee->license_expire < Carbon\Carbon::now()?'License has expired':$employee->license_expire->diffForHumans() }}</b></p>

dotychczas diffForHumans() metoda działa dobrze.

Ale w tym przypadku wartość domyślna formularza edycji również była dzisiejszą datą bez względu na to, co było w bazie danych (używam formy częściowej). Aby rozwiązać ten problem, zmieniłem wartość domyślną w HTML na NUll. I dodaj inną metodę w moim modelu, aby pokazać aktualną datę w formularzu tworzenia.

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

Po tym, kiedy idę do strony głównej mam FatalErrorException który mówi Call to a member function diffForHumans() on string

Kiedy sprawdzić datę z dd($employee->license_expire) ponownie stać STRING.

Czy ktoś może mi powiedzieć, w jaki sposób mogę przekonwertować strunę na węgiel w tej sytuacji?

lub

Make My utworzyć domyślną datę forma jako datą dzisiejszą datą w edycji formularza jest z bazą danych i mogę używać diffForHumans(), aby wyświetlić alert na stronie głównej?

Odpowiedz

26

Byłeś prawie na miejscu.

Usuń protected $dates = ['license_expire']

a następnie zmienić LicenseExpire mutator do:

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

ten sposób zwróci instancję Carbon nie wiem co. Tak więc dla twojej formy masz po prostu $employee->license_expire->format('Y-m-d') (lub jakikolwiek format jest wymagany) i diffForHumans() powinien również działać na stronie głównej.

Mam nadzieję, że to pomoże!

+2

tak! pomogło. Zrobiłem dokładnie to, co powiedziałeś. działa idealnie, jak chcę. – smartrahat

1

Spróbuj

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

Dlaczego nie spróbować użyć następujących czynności:

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