Я хочу получить временную метку UNIX или преобразовать дату created_at или updated_at в формат временной метки UNIX из полей базы данных (created_at и updated_at) в laravel 5.8, как я могу это сделать?
это мой код в моем контроллере:
public function viewArchives(){
$data = Archive::select(‘created_at’)->get();
return view(‘view.archives’, compact(‘data’));
}
и в представлении/archives.blade.php:
<?php echo $data;?>
результат:
{“created_at”:”2019-03-17 19:10:30″}
но я хочу, чтобы результат был таким:
{“created_at”:”1552849830″}
как можно получить этот результат?






Добавьте представление strtotime()/archives.blade.php :
<?php echo strtotime( $data );?>
@namelivia Вы правы. Сначала получите значение created_at из $data, а затем преобразуйте strtotime.
@namelivia, лайк {{ $data['created_at'] }} ИЛИ {{ $data->created_at }}
@AmitSenjaliya, когда я использую это >>{{ $data['created_at'] }}, он говорит: Undefined index: created_at ... . И когда я использую это>>{{ $data->created_at }}, он говорит: Свойство [created_at] не существует в этом экземпляре коллекции.
@AminArjmand В вашем контроллере измените метод get() на toArray(). Нравится $data = Archive::select(‘created_at’)->toArray(); И использовать переменную в лезвии {{ $data['created_at'] }}
@AmitSenjaliya, я изменил на toArray(), и ошибка >> Call to undefined method Illuminate\Database\Eloquent\Builder::toArray()
$string = '2019-03-17 19:10:30';
$obj = new stdClass;
$obj->created_at = $string;
$collection = [$obj];
foreach ($collection as $k => &$v) {
$collection[$k]->created_at = strtotime($v->created_at);
}
//var_dump($collection);
или
$string = '2019-03-17 19:10:30';
$obj = new stdClass;
$obj->created_at = $string;
$collection = [$obj];
array_walk($collection, function (&$item, $key) {
$item->created_at = strtotime($item->created_at);
});
//var_dump($collection);
Или в вашем случае
public function viewArchives()
{
$data = Archive::select('created_at')->get();
foreach ($data as $k => &$v) {
$v->created_at = strtotime($v->created_at);
}
return view('view.archives', compact('data'));
}
или
public function viewArchives()
{
$data = Archive::select('created_at')->get();
array_walk($data, function (&$item, $key) {
$item->created_at = strtotime($item->created_at);
});
return view('view.archives', compact('data'));
}
Это хорошее место для использования функции array_walk().
Спасибо @Tpojka, ваше решение сработало
С Eloquent Model можно фактически определить $casts для каждого столбца:
class SomeModel extends Model
{
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'created_at' => 'datetime'
];
}
Если вместо этого вам нужны временные метки эпохи, просто удалите это приведение (которое, вероятно, присутствует).
Когда метка времени не из какого-либо Eloquent Model, ее все равно можно отрендерить с помощью Blade:
@php
$dt = new DateTime();
echo $dt->setTimestamp( $timestamp )->format("Y-m-d H:m:s");
@endphp
Или наоборот:
@php
echo strtotime( $isodate );
@endphp
Использование strtotime правильно, но на самом деле в его примере
$data— это не просто строка даты, это набор значений ключа.