Как изменить формат даты из базы данных в контроллере Laravel 7

Я попытался отобразить данные в базе данных, формат даты в базе данных выглядит как 2020-10-11T17:22:29.000000Z», как я могу изменить его только на 2020-10-11 или 11 декабря 2020 года?

это мой контроллер

 public function get_all_artikel(){
        $data = ArtikelKonten::select(
                'artikel_kategori.nama as kategori','artikel_konten.*')
                ->join('artikel_kategori','artikel_kategori.id','artikel_konten.id_kategori')
                ->get();
        if ($data){
         return response()->json([
                'status' => true,
                'artikel' => $data,
         ],200);}
         else{
             return response()->json([
                'status' => false,
                'message' => 'No Artikel were found'
         ],404);}
        }

это моя модель

class ArtikelKonten extends Model
{
    
    protected $table = 'artikel_konten';
    protected $fillable = ['id_kategori', 'gambar', 'tag_program', 'nm_program', 'judul', 'preview', 'konten'];
    
    const CREATED_AT = 'created';
    const UPDATED_AT = 'modified';
}

И это результат

{
    "status": true,
    "artikel": [
        {
            "kategori": "Program",
            "id": 4,
            "id_kategori": "2",
            "tag_program": "2",
            "nm_program": "Zakat Mall",
            "gambar": "http://127.0.0.1:8000/storage/photos/1/article1.png",
            "judul": "Mengenalkan Zakat Kepada Anak",
            "preview": null,
            "konten": null,
            "created": "2020-12-10T07:24:50.000000Z",
            "modified": "2020-12-10T08:06:07.000000Z"
        },
        {
            "kategori": "Berita",
            "id": 10,
            "id_kategori": "1",
            "tag_program": "4",
            "nm_program": "Jumat Barokah",
            "gambar": "http://127.0.0.1:8000/storage/photos/1/article2.png",
            "judul": "Suplemen Iman Ditengah Pandemi",
            "preview": null,
            "konten": null,
            "created": "2020-12-11T20:44:25.000000Z",
            "modified": "2020-12-11T20:44:25.000000Z"
        },
        {
            "kategori": "Program",
            "id": 11,
            "id_kategori": "2",
            "tag_program": "2",
            "nm_program": "Zakat Mall",
            "gambar": "http://127.0.0.1:8000/storage/photos/1/article3.png",
            "judul": "Menumbuhkan Semangat Berzakat Umat",
            "preview": null,
            "konten": null,
            "created": "2020-12-11T20:46:23.000000Z",
            "modified": "2020-12-11T20:46:23.000000Z"
        }
    ]
}

Я просто хочу изменить «созданный»: «2020-12-11T20:46:23.000000Z» на «создать»: «2020-12-11», спасибо за ваш ответ, ребята :)

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
3 179
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

используйте date() для четкого формата даты и времени

date('d-m-Y', strtotime($value->created));

В Eloquent Model есть свойство cast для приведения вывода запроса к нужному формату, в вашем случае просто приведите столбцы даты, как в doc:

class ArtikelKonten extends Model
{

protected $casts = [
    'created' => 'datetime:Y-m-d','modified' => 'datetime:Y-m-d'
];
}

Laravel позволяет указать формат, в котором поля даты и времени должны быть преобразованы при сериализации в массив или json.

Определить свойство $casts в модели


protected $casts = [
    'created_at' => 'datetime:Y-m-d',
    'updated_at' => 'datetime:Y-m-d',
];

Подробнее : https://laravel.com/docs/8.x/eloquent-mutators#date-casting

Ответ принят как подходящий

Laravel 7 использует новый формат сериализации даты при использовании метода toArray или toJson в моделях Eloquent.

Если вы хотите продолжать использовать предыдущее поведение, вы можете переопределить метод serializeDate() в своей модели:

use DateTimeInterface;

protected function serializeDate(DateTimeInterface $date)
{
    return $date->format('Y-m-d');
}

Смотрите официальный документ по обновлению здесь [7.x]

Первый способ

Просто добавьте в модель:

  protected function asDateTime($value)
{
    return parent::asDateTime($value)->format('d/m/y');
}

Второй способ

Вы можете индивидуально настроить формат даты и даты Eloquent:

protected $casts = [
'created_at'  => 'date:Y-m-d',
'updated_at' =>  'datetime:Y-m-d H:00',];

Несколько ссылок, которые помогли мне ответить ссылка первая

Несколько ссылок, которые помогли мне ответить ссылка вторая

вы можете использовать аксессор для created_at и поместить этот код в свою модель:

    public function getCreatedAtAttribute($date)
{
    return Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $date)->format('Y-m-d');
}

PHP-фреймворк Laravel

Платформа Laravel : 8.42.1 Дата тестирования : 22 мая 2021 г. PHP-версия : 7.3.8 База данных : МарияДБ 10.5.8 Операционные системы : MacOS 10.13.6 Высокая Сьерра

Вопрос

Как преобразовать или изменить значение/результат столбца таблицы на лету, например. отформатировать метку времени в формате даты (г-м-д ч: и: с)?

Отвечать

Использование Laravel Eloquent: Mutators & Casting помогает пользователю преобразовывать значения данных на лету, определяя их в свойстве Model.

Введение

Аксессоры, мутаторы и приведение атрибутов позволяют преобразовывать значения атрибутов Eloquent, когда вы извлекаете или устанавливаете их в экземплярах модели. Например, вы можете использовать шифратор Laravel для шифрования значения, пока оно хранится в базе данных, а затем автоматически расшифровывать атрибут при доступе к нему в модели Eloquent. Или вы можете преобразовать строку JSON, хранящуюся в вашей базе данных, в массив при доступе к ней через вашу модель Eloquent.

Приведение атрибутов

Приведение атрибутов предоставляет функциональные возможности, аналогичные средствам доступа и мутаторам, не требуя от вас определения каких-либо дополнительных методов в вашей модели. Вместо этого свойство вашей модели $casts предоставляет удобный метод преобразования атрибутов в общие типы данных.

Схема моей таблицы

Данные моей таблицы

Мой передний результат (до броска)

Мой передний результат (пост-бросок)

Мой файл модели

<?php
// app/Models/Post.php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use HasFactory;

    protected $fillable = [
        'title', 'description'
    ];

    // I've added this because I want to convert timestamp to 'y-m-d' on the fly
    protected $casts = [
        'created_at' => 'datetime:Y-m-d',
        'updated_at' => 'datetime:Y-m-d'
    ];
}

Мой контроллер (я создал контроллер внутри подпапки «API»)

<?php
// app/Http/Controllers/API/PostController.php

namespace App\Http\Controllers\API;

use App\Http\Controllers\Controller;

use App\Models\Post;

use Illuminate\Http\Request;

use Validator;

class PostController extends Controller
{
    // all posts, I'm calling this be the default
    public function index()
    {
        $posts = Post::all()->toArray();
        return array_reverse($posts);
    }
}

Мои маршруты

<?php
// routes/api.php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\API\PostController;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

Route::get('posts', [PostController::class, 'index']);
Route::group(['prefix' => 'post'], function () {
    Route::post('add', [PostController::class, 'add']);
    Route::get('edit/{id}', [PostController::class, 'edit']);
    Route::post('update/{id}', [PostController::class, 'update']);
    Route::delete('delete/{id}', [PostController::class, 'delete']);
});

Мой взгляд (Vue)

<template>
    <div>
        <h3 class = "text-center">All Posts</h3><br/>
 
        <table class = "table table-bordered table-responsive">
            <thead>
            <tr>
                <th>ID</th>
                <th>Title</th>
                <th>Description</th>
                <th>Created At</th>
                <th>Updated At</th>
                <th>Actions</th>
            </tr>
            </thead>
            <tbody>
            <tr v-for = "post in posts" :key = "post.id">
                <td>{{ post.id }}</td>
                <td>{{ post.title }}</td>
                <td style = "width: 30%">{{ post.description }}</td>
                <td>{{ post.created_at }}</td>
                <td>{{ post.updated_at }}</td>
                <td>
                    <div class = "btn-group" role = "group">
                        <router-link :to = "{name: 'edit', params: { id: post.id }}" class = "btn btn-primary">Edit
                        </router-link>
                        <button class = "btn btn-danger" @click = "deletePost(post.id)">Delete</button>
                    </div>
                </td>
            </tr>
            </tbody>
        </table>
    </div>
</template>
 
<script>
    export default {
        data() {
            return {
                posts: []
            }
        },
        created() {
            this.axios
                .get('/api/posts')
                .then(response => {
                    this.posts = response.data;
                });
        },
        methods: {
            deletePost(id) {
                this.axios
                    .delete(`/api/post/delete/${id}`)
                    .then(response => {
                        let i = this.posts.map(item => item.id).indexOf(id); // find index of your object
                        this.posts.splice(i, 1)
                    });
            }
        }
    }
</script>

Другие вопросы по теме